❶ 學生選課系統c語言程序
根據自己的需要,自己看著修改一下 ^^
#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
p2->next=NULL;
}
void inputc()//錄入課程主函數
{
int i;
printf("\t\t\t錄入課程信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1) head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1) head1=p1->next;
else p2->next=p1->next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
}
p2->next=NULL;
}
void inputs()//錄入學生信息主函數
{
int i;
printf("\t\t\t錄入學生信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2) head2=p1->next;
else p2->next=p1->next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1) p=p->next;
(p->nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s->next!=NULL) s=s->next;
if(s->num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",&num1);
p1=head1;
while(p1->num1!=num1) p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",&num2);
p=head2;
while(p->num2!=num2 && p!=NULL) p=p->next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p->nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i]) p0=p0->next;
f=f+p0->score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續退課(y/n)?");
getchar();
c=getchar();
(p->nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
p=p->next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
void store()//信息主函數
{
int i;
printf("\t\t系統信息查看及存儲\n");
printf("1.查看課程信息\n");
printf("2.查看學生信息\n");
printf("3.存儲信息\n");
printf("4.返回主菜單\n");
printf("請輸入(1~4):\n");
scanf("%d",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統!\n");
printf("菜單:\n");
printf("1.錄入課程信息\n");
printf("2.課程管理\n");
printf("3.錄入學生信息\n");
printf("4.學生信息管理\n");
printf("5.學生選課\n");
printf("6.系統信息查看及存儲\n");
printf("7.退出系統\n");
printf("\n請輸入菜單選項(1~7):\n");
scanf("%d",&i);
if(i<1 || i>7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統!\n\n再見!\n");
}
}
return(0);
}
❷ C語言課程設計《學生選課系統》的設計與實現
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 100
struct student
{
char num[10];
char name[10];
char tel[11];
};
/* 以下是函數原型說明,被調函數的定義在主調函數後面時,要加此部分 */
void myprint();
void mycreate();
void mydisplay();
void mysearch();
/* sch_num與sch_name函數被mysearch調用 */
void sch_num(FILE *fp);
void sch_name(FILE *fp);
void mymodify();
void myadd();
void mydelete();
/* del_num與del_name函數被mydelete調用 */
void del_num(FILE *fp);
void del_name(FILE *fp);
void mysort();
/* sort_num與sort_name函數被mysort調用 */
void sort_num();
void sort_name();
void main()
{
char choose,yes_no;
do
{
myprint(); /* 顯示主菜單 */
printf(" ");
choose=getch();
switch(choose)
{
case '1': mycreate(); break; /* 創建 */
case '2': mydisplay(); break; /* 顯示 */
case '3': mysearch(); break; /* 查詢 */
case '4': mymodify(); break; /* 修改 */
case '5': myadd(); break; /* 添加 */
case '6': mydelete(); break; /* 刪除 */
case '7': mysort(); break; /* 排序 */
case '0': break;
default:printf("\n %c為非法選項!\n",choose);
}
if(choose=='0')
break;
printf("\n 要繼續選擇嗎(Y/N)?\n");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}
void myprint() /* 顯示菜單界面 */
{
printf("\n\n\n\n\n\n\n\n");
printf(" |----------------------------|\n");
printf(" | 請輸入選項編號(0-7): |\n");
printf(" |----------------------------|\n");
printf(" | 1--創建信息管理系統 |\n");
printf(" | 2--顯示信息管理系統 |\n");
printf(" | 3--查詢信息管理系統 |\n");
printf(" | 4--修改信息管理系統 |\n");
printf(" | 5--添加信息管理系統 |\n");
printf(" | 6--刪除信息管理系統 |\n");
printf(" | 7--排序信息管理系統 |\n");
printf(" | 0--退出 |\n");
printf(" |----------------------------|\n");
}
/* 定義創建信息管理系統的函數 */
void mycreate()
{
int i=1;
struct student temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
printf("\n 請輸入第1個記錄:\n");
printf(" 學號(用#結束輸入):");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#結束輸入):");
gets(temp.name);
printf(" 電話號碼(用#結束輸入):");
gets(temp.tel);
while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')
{
fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel);
i++;
printf("\n 請輸入第%d個記錄:\n",i);
printf(" 學號(用#結束輸入):");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#結束輸入):");
gets(temp.name);
printf(" 電話號碼(用#結束輸入):");
gets(temp.tel);
}
fclose(fp);
}
/* 定義顯示信息管理系統的函數 */
void mydisplay()
{
int n=0;
struct student temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
// clrscr();
printf(" 學號 姓名 電話號碼\n");
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
n++;
}
if(n==0)
printf("\n 文件中無記錄!\n");
else
printf("\n 文件中共有%d個記錄!\n",n);
fclose(fp);
}
/* 定義查詢信息管理系統的函數 */
void mysearch()
{
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
printf("\n 按學號查詢(h),還是按姓名查詢(m)?");
c=getch();
if(c=='h'||c=='H')
sch_num(fp); /* 按學號查詢 */
if(c=='m'||c=='M')
sch_name(fp); /* 按姓名查詢 */
else
printf("\n 非法字元!\n");
fclose(fp);
}
/* 定義按學號查詢信息管理系統的函數 */
void sch_num(FILE *fp)
{
int flag=0,n=0;
char tempnum[10];
struct student temp;
printf("\n 請輸入要查詢記錄的學號:");
gets(tempnum);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempnum,temp.num)==0)
{
if(flag==0)
printf(" 學號 姓名 電話號碼\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中無記錄!\n");
else
if(flag==0)
printf("\n 文件中無此人!\n");
}
/* 定義按姓名查詢信息管理系統的函數 */
void sch_name(FILE *fp)
{
int flag=0,n=0;
char tempname[10];
struct student temp;
printf("\n 請輸入要查詢記錄的姓名:");
gets(tempname);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempname,temp.name)==0)
{
if(flag==0)
printf(" 學號 姓名 電話號碼\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中無記錄!\n");
else
if(flag==0)
printf("\n 文件中無此人!\n");
}
/* 定義修改信息管理系統的函數 */
void mymodify()
{
char c;
int n=0;
struct student *find,temp,record[100],*p; /* 最多100個記錄 */
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
if(n==0)
{
printf("\n 文件中無記錄!\n");
return;
}
printf("\n 請輸入要修改記錄的學號:");
gets(temp.num);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
find=p; /* find記住修改記錄的位置 */
break;
}
if(p==record+n)
{
printf("\n 無此人!\n");
return;
}
do
{
printf("\n 請輸入正確的學號:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 請輸入正確的姓名:");
gets(temp.name);
printf(" 請輸入正確的電話號碼:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if((strcmp(temp.num,p->num)==0)&&(p!=find))
{
printf("\n 學號重復,要重新輸入嗎(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*find=temp; /* find指向需要修改記錄的位置 */
break;
}
}while(c=='Y'||c=='y');
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
/* 定義添加信息管理系統的函數 */
void myadd()
{
char c;
int n=0;
struct student temp,record[N],*p;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
do
{
printf("\n 請輸入新記錄的學號:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 請輸入新記錄的姓名:");
gets(temp.name);
printf(" 請輸入新記錄的電話號碼:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
printf("\n 學號重復,要重新輸入嗎(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*p=temp;
break;
}
}while(c=='Y'||c=='y');
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
for(p=record;p<record+n+1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
/* 定義刪除信息管理系統的函數 */
void mydelete()
{
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
printf("\n 按學號刪除(h),還是按姓名刪除(m)?");
c=getch();
if(c=='h'||c=='H')
del_num(fp); /* 按學號刪除 */
if(c=='m'||c=='M')
del_name(fp); /* 按姓名刪 */
else
printf("\n 非法字元!\n");
fclose(fp);
}
/* 定義按學號刪除信息管理系統的函數 */
void del_num(FILE *fp)
{
int n=0;
char tempnum[10];
struct student record[N],*p,*k;
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 請輸入要刪除記錄的學號:");
gets(tempnum);
for(k=record;k<record+n;k++)
if(strcmp(tempnum,k->num)==0)
break; /* 找到要刪記錄結束循環 */
if(k<record+n) /* 提前結束循環,說明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相當於刪除記錄 */
*p=*(p+1);
else
printf("\n 無此人!\n");
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}
/* 定義按姓名刪除信息管理系統的函數 */
void del_name(FILE *fp)
{
int n=0;
char tempname[10];
struct student record[N],*p,*k;
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 請輸入要刪除記錄的姓名:");
gets(tempname);
for(k=record;k<record+n;k++)
if(strcmp(tempname,k->name)==0)
break; /* 找到要刪記錄結束循環 */
if(k<record+n) /* 提前結束循環,說明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相當於刪除記錄 */
*p=*(p+1);
else
printf("\n 無此人!\n");
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}
/* 定義排序信息管理系統的函數 */
void mysort()
{
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
fclose(fp);
printf("\n 按學號排序(h),還是按姓名排序(m)?");
c=getch();
if(c=='h'||c=='H')
sort_num(); /* 按學號排序 */
if(c=='m'||c=='M')
sort_name(); /* 按姓名排序 */
else
printf("\n 非法字元!\n");
}
/* 定義按學號排序信息管理系統的函數 */
void sort_num()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 按升序(s),還是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按學號的升序排列 */
for(i=0;i<n-1;i++) /* 選擇法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J') /* 按學號的降序排列 */
for(i=0;i<n-1;i++) /* 選擇法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字元!\n");
return;
}
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
for(p=record;p<record+n;p++)
{
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
}
fclose(fp);
}
/* 定義按姓名排序信息管理系統的函數 */
void sort_name()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);
printf("\n 按升序(s),還是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按姓名的升序排列 */
for(i=0;i<n-1;i++) /* 選擇法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J') /* 按姓名的降序排列 */
for(i=0;i<n-1;i++) /* 選擇法排序 */
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字元!\n");
return;
}
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打開文件失敗!\n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
❸ c語言學生選修課程管理系統
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct student
{
char name[60];
char ID[7];
int score;
};int dq(struct student st[]);
void xianshi();
void bc(struct student st[]);
void add();
void select();
void zz();
void chazhao();
void xhcz();
void xmcz();
void del();
void xmsc();
void xhsc();
void tj();
void px();
void bjg();
void xg();
void xhxg();
void xmxg();
void bca();
void fh();
struct student st[300]; //這個數組用來保存所有的學生信息 和文件裡面的一致
int Number=0; //記錄總的學生人數 也就是數組/文件裡面的學生人數
void main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;
if((fp=fopen("C://student.dat","rb"))==NULL)
{
printf("\n=========>提示:文件不存在,是否要創建一個?(y/n)\n");
scanf("%c",&yesorno);
if(yesorno=='y'||yesorno=='Y')
{
//這里僅為了建立文件
fp=fopen("C://student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(st); //要是文件只能夠已經有數據 將數據初始化到數組中
}
system("cls");
while(true)
{
xianshi();
printf("\t\t====>請選擇:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case 0: exit(0);
//退出
break;
case 1: add();
fh();//增加學生成績
break;
case 2: select();
fh();//查看學生成績
break;
case 3: chazhao();
fh();// 查找
break;
case 4: del();
fh();//刪除
break;
case 5: tj();
fh();//統計
break;
case 6: px();
fh();//排序
break;
case 7: bjg();
fh();//輸出不及格
break;
case 8: xg();
fh();//修改
break;
case 9:zz();
fh();//作者
break;
case 10:bca();
fh();//保存
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
void bca()
{
printf("\t=====程序在運行時已自動保存.....\n");
}
void fh()
{
printf("\t===>按Enter鍵返回主菜單\n");
}
void xg() //修改學生信息
{
int way=0;
printf("請選擇修改查找方式\n");
printf("1 按姓名查找修改\n");
printf("2 按學號查找修改\n");
scanf("%d",&way);
switch(way)
{
case 1: xmxg();
break;
case 2: xhxg();
break;
default: printf("輸入有誤,結束!\n");
break;
}
}
//按姓名修改
void xmxg()
{
FILE *fp=NULL;
char name[60];
int i=0;
int changeIndex=0;
int index=0;
printf("請輸入要修改的學生姓名:");
scanf("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name))
{
changeIndex=i; //保存要修改的人的下標
}
break;
}
printf("\t姓名\t學號\t成績\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("請重新輸入該學生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("學號:");
scanf("%s",st[changeIndex].ID);
printf("成績:");
scanf("%d",&st[changeIndex].score); //信息修改後重新更新文件裡面的數據 以保持數據一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
}
void xhxg()//按學號修改
{
FILE *fp=NULL;
char id[60];
int i=0;
int changeIndex=0;
int index=0;
printf("請輸入要修改的學生學號:");
scanf("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID))
{
changeIndex=i; //保存要修改的人的下標
}
break;
}
printf("\t姓名\t學號\t成績\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("請重新輸入該學生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("學號:");
scanf("%s",st[changeIndex].ID);
printf("成績:");
scanf("%d",&st[changeIndex].score);
//信息修改後重新更新文件裡面的數據 以保持數據一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("\t=======>修改成功\n");
}void bjg() //輸出不及格人數
{
int i=0;
printf("以下是不及格:\n");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (st[i].score<60)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void px()//排序
{
struct student temp;
int wantNUmber=0;
int i=0;
int j=0;
for(i=0;i<Number-1;i++)
{
for(j=i;j<Number-1;j++)
{
if(st[j].score>st[j+1].score)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
printf("你想輸出前幾名的成績:");
scanf("%d",&wantNUmber);
if (wantNUmber>Number)
{
wantNUmber=Number;
} printf("\t姓名\t學號\t成績\n");
for(i=0;i<wantNUmber;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void tj()//統計
{
int i=0;
double sum=0.0;
for(i=0;i<Number;i++)
{
sum+=st[i].score;
}
printf("全班總分為:%f\n",sum);
printf("平均分為:%f\n",sum/Number);
}
void del()//刪除
{
int n=0;
printf("1 按姓名刪除\n");
printf("2 按學號刪除\n");
scanf("%d",&n);
switch(n)
{
case 1: xmsc();
break;
case 2: xhsc();
break;
}
}
void xmsc()//按姓名刪除
{
FILE *fp=NULL;
char name[60];
int i=0;
int j=0;
printf("請輸入要刪除的學生姓名:");
scanf("%s",name);
for(i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0) //如果查找到就刪除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
} //將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("刪除成功;\n");
}
void xhsc()//按學號刪除
{
FILE *fp=NULL;
char id[60];
int i=0;
int j=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0) //如果查找到就刪除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
}
//將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("刪除成功;\n");
}
void chazhao()//查找學生
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按學號查找\n");
scanf("%d",&n);
switch(n)
{
case 1: xmcz();
break;
case 2: xhcz();
break;
default: printf("輸入有誤,結束!\n");
break;
}
}
void xhcz()//按學號查找
{
char id[7];
int i=0;
printf("請輸入要查找學生學號:");
scanf("%s",id);
system("cls");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void xmcz()//按姓名查找
{
char name[7];
int i=0;
printf("請輸入要查找學生姓名:");
scanf("%s",name);
system("cls");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void zz()
{
printf("\t**********************************************************\n\n");
printf("\t^^^^^^^^^^ 武漢工程大學郵電與信息工程學院 ^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^ 07網路與安全管理2班 ^^^^^^^^^\n\n");
printf("\t^^^^^^^^ 易樊製作 ^^^^^^^^\n\n");
printf("\t^^^^^^^^^ 禁止CTRL+C 謝謝合作 ^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^ QQ:895115828\n\n");
printf("\t**********************************************************\n\n");
}
void select()//查看學生
{
int i=0;
printf("以下是全部學生成績\n");
printf("\t姓名\t學號\t成績\n");
for(i=0;i<Number;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void add()//增加學生
{
int numberTemp=0;
int i=0;
struct student temp; //臨時保存信息
printf("請輸入要增加學生成績個數:");
scanf("%d",&numberTemp);
for(i=0;i<numberTemp;i++)
{
printf("輸入第%d個同學信息\n",i+1);
printf("姓名:");
scanf("%s",temp.name);
printf("學號:");
scanf("%s",temp.ID);
printf("成績:");
scanf("%d",&temp.score);
st[Number++]=temp; //將剛添加的寫入到數組
bc(&temp); //將剛添加的寫入到文件 }
printf("添加成功\n");
}
void bc(struct student *st)
{
FILE *fp=NULL;
fp=fopen("C://student.dat","ab+");
fwrite(st,sizeof(struct student),1,fp);
fclose(fp);
}
int dq(struct student st[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("C://student.dat","rb");
while(fread(&st[i],sizeof(struct student),1,fp))
i++;
fclose(fp);
return i;
}
void xianshi()
{
printf("\t*****************************************************************\n");
printf("\t* *\n");
printf("\t* 學生成績管理系統 *\n");
printf("\t* *\n");
printf("\t* [1] 增加學生成績 [2] 查看學生成績 *\n");
printf("\t* [3] 查找學生成績 [4] 刪除學生成績 *\n");
printf("\t* [5] 統計(總成績和平均分) [6] 輸出前N名學生成績 *\n");
printf("\t* [7] 輸出不及格人數 [8] 修改學生信息 *\n");
printf("\t* [9] 關於作者 [10] 保存數據 *\n");
printf("\t* [0] 退出系統 *\n");
printf("\t*****************************************************************\n");
}運行成功,請你下去後慢慢研究下這個程序,很簡單的,祝你成功!~
求採納為滿意回答。
❹ c語言編寫學生選課系統
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
//#include<iostream.h>
void clrscr(void)
{
system("cls");
}
char *getpass(char s[])
{
char *pass,ch;
int i;
pass=new char[100];
i=0;
pass[0]='\0';
printf("%s",s);
while(1)
{
ch=getch();
if(ch!=13)
{
printf("*");
pass[i]=ch;
i++;
pass[i]='\0';
}
else break;
}
//scanf("%s",pass);
return pass;
}
struct course
{
char name[20];
int score;
int students_limited;
course *pNext;
};
struct user
{
char name[20];
char password[17];
char coursename[20];
user *pNext;
};
int Login()
{
char key;
ST1:
clrscr();
printf("\n\n\n\n\n\n\n\t\t\tWelcome to Course System!");
printf("\n\n");
printf("\n\t\t\t1. Login with Administrator");
printf("\n\t\t\t2. Login with Users");
printf("\n\t\t\t0. Exit");
key=getch();
switch(key)
{
case '1' : return 1;
case '2' : return 2;
case '0' : return 0;
default : printf("\n\n\t\t\tInput wrong!\n\t\t\t\tPress any key to continue...");
getch();
goto ST1;
}
}
course *readcourse()
{
FILE *fp;
book *pHead,*pTemp,*pLast;
fp=fopen("coursemsg.dat","r");
if(fp==NULL)
{
printf("\n\n\t\t\tOpen course message file failed!");
return NULL;
}
pHead=NULL;
while(!feof(fp))
{
pTemp=new course;
if(fread(pTemp,sizeof(course),1,fp)!=1)
{
delete pTemp;
break;
}
if(pHead==NULL)
{
pHead=pTemp;
pLast=pTemp;
}
pLast->pNext=pTemp;
pTemp->pNext=NULL;
pLast=pTemp;
}//while
fclose(fp);
return pHead;
}
void writecoursetofile(course *pHead)
{
FILE *fp;
course *pTemp,*pNext;
fp=fopen("coursemsg.dat","w");
for(pTemp=pHead;pTemp;pTemp=pTemp->pNext)
fwrite(pTemp,sizeof(course),1,fp);
fclose(fp);
}
void Add_course()
{
course one,*p;
int i,j;
FILE *fp;
p=&one;
while(1)
{
clrscr();
printf("\n\n\n\n\n\n\n\n\t\tPlease input the name of course(-1 to end):");
//cin>>p->name;
scanf("%s",p->name);
if(!strcmp(p->name,"-1"))break;
i=0;
while(1)
{
if(p->name[i]=='\0')break;
else i++;
}
for(j=i;j<20;j++)p->name[j]='\0';
printf("\n\t\tInput it's scores:");
//cin>>p->score;
scanf("%d",&p->score);
fp=fopen("coursemsg.dat","a+");
fwrite(p,sizeof(course),1,fp);
fclose(fp);
printf("\n\n\t\tAdd course message OK!");
printf("\n\t\t\tPress any key to countinue...");
getch();
}
}
void Del_course()
{
course *pHead,*pNewHead,*pTemp,*pLast;
char name[20];
pHead=readcourse();
printf("\n\t\tPlease input the name of course to be delete:");
gets(name);
while(strcmp(pHead->name,name)==0)
{
pNewHead=pHead->pNext;
printf("\n\n\t\t--%s had been deleted" ,name);
delete pHead;
pHead=pNewHead;
}
for(pTemp=pHead,pLast=pHead;pTemp!=NULL;pLast=pTemp,pTemp=pTemp->pNext)
{
if(strcmp(pTemp->name,name)==0)
{
pLast->pNext=pTemp->pNext;
printf("\n\n\t\t--%s had been deleted" ,name);
delete pTemp;
pTemp=pLast;
}
}//for
writecoursetofile(pHead);
getch();
}
void course_Op()
{
char key;
ST3:
clrscr();
printf("\n\n\n\n\n\n\n\n\t\t\t\t1. Add Course");
printf("\n\t\t\t\t2. Delete Course");
printf("\n\t\t\t\t0. EXIT");
key=getch();
switch(key)
{
case '1' : Add_course();break;
case '2' : Del_course();break;
case '0' : goto _End;
default : printf("\n\tInput wrong!\n\tPress any key to continue...");
getch();
}
goto ST3;
_End:
;
}
void Add_user()
{
FILE *fp;
char name[20],*na,password[6],*pa;
int i,j;
user one,*p;
p=&one;
pa=password;
na=name;
while(1)
{
clrscr();
printf("\n\n\n\n\n\n\n\t\tPlease input user's name(-1 to end):");
gets(name);
if(!strcmp(name,"-1"))break;
pa=getpass("\n\t\tPlease input new password:");
strcpy(p->name,na);
strcpy(p->password,pa);
fp=fopen("usermsg.dat","ab+");
fwrite(p,sizeof(user),1,fp);
fclose(fp);
printf("\n\t\tuser's message has been saved!");
printf("\n\t\tPress any key to countinue...");
getch();
}
}
user *readcusmsg()
{
FILE *fp;
user *pHead,*pTemp,*pLast;
fp=fopen("usermsg.dat","rb");
if(fp==NULL)
{
printf("\n\nOpen user's message file failed");
return NULL;
}
pHead=NULL;
while(!feof(fp))
{
pTemp=new user;
if(fread(pTemp,sizeof(user),1,fp)!=1)
{
delete pTemp;
break;
}
if(pHead==NULL)
{
pHead=pTemp;
pLast=pTemp;
}
pLast->pNext=pTemp;
pTemp->pNext=NULL;
pLast=pTemp;
}//while
fclose(fp);
return pHead;
}
void writecusmsgtofile(user *pHead)
{
FILE *fp;
user *pTemp,*pNext;
fp=fopen("usermsg.dat","wb");
for(pTemp=pHead;pTemp;pTemp=pTemp->pNext)
fwrite(pTemp,sizeof(user),1,fp);
fclose(fp);
}
void user_Op()
{
char key;
ST4:
clrscr();
printf("\n\n\n\n\n\n\n\n\t\t\t\t1. Add Users");
printf("\n\t\t\t\t0. EXIT");
key=getch();
switch(key)
{
case '1' : Add_user();break;
case '0' : goto _End;
default : printf("\n\tInput wrong!\n\tPress any key to continue...");
getch();
}
goto ST4;
_End:;
}
void List_all_course()
{
course *pHead,*pTemp;
int Count=0,tense;
pHead=readcourse();
if(!pHead)
{
printf("\n\t(No data)");
exit(0);
}
printf("\n%30s%8s%10s","course name","Score","Tense");
for(pTemp=pHead;pTemp!=NULL;pTemp=pTemp->pNext)
{
if(pTemp->n>0)tense=1;
else tense=0;
printf("\n%30s%8d%10d",pTemp->name,pTemp->score,tense);
Count++;
if(Count%20==0){printf("Press any key to countinue...");getch();}
}
getch();
}
void Search_course_name()
{
char name[20];
int tense,k=1;
book *pHead,*pTemp,*pNext;
printf("\n\tPlease input the name of the course you want to search:");
gets(name);
pHead=readcourse();
for(pTemp=pHead;pTemp!=NULL;pTemp=pTemp->pNext)
if(!strcmp(pTemp->name,name))
{
if(pTemp->n>0)tense=1;
else tense=0;
k=0;
printf("\n%30s%8d%10d",pTemp->name,pTemp->score,tense);
}
if(k)
{
printf("\n\n\t\tThere's no course named %s",name);
printf("\n\t\t\tPress any key to countinue...");
}
getch();
}
void course_Search()
{
char key;
ST5:
clrscr();
printf("\n\n\n\n\n\n\t\t\t\t1. List all course");
printf("\n\t\t\t\t2. Search by the name of course");
printf("\n\t\t\t\t0. EXIT");
key=getch();
switch(key)
{
case '1' : List_all_course();break;
case '2' : Search_course_name();break;
case '0' : goto _End;
default : printf("\n\t\t\tInput wrong!\n\t\t\tPress any key to continue...");
getch();
}
goto ST5;
_End:;
}
void Pass(int Res)
{
FILE *fp;
char psw[17],*p,pass_in[17],user_name[20];
user *pHead,*pTemp;
int i,k=0;
clrscr();
p=pass;
if(Res==1)
{
if(!(fp=fopen("adm.psw","rb")))
{
printf("\n\n\n\n\n\n\n\t\tWelcome!\n\t******Login Administrator******");
p=getpass("\n\tPlease input your new password:");
fp=fopen("adm.psw","wb");
fprintf(fp,"%s",p);
fclose(fp);
}
else
{
fscanf(fp,"%s",pass_in);
fclose(fp);
printf("\n\n\n\n\n\n\t******Login by Administrator******");
p=getpass("\n\n\t\t\tPlease input your password:");
if(strcmp(p,pass_in))
{
printf("\n\t\tYour Password is wrong!");
printf("\n\t\tPress any key to EXIT...");
getch();
exit(0);
}//if_else
}
Adm_List();
}//if
else
{
printf("\n\n\n\n\n\n\n\n\t\t\t\tWelcome!");
printf("\n\t\t\t******Login by User******");
printf("\n\t\t\tPlease input your name:");
scanf("%s",user_name);
p=getpass("\n\t\t\tPlease input your password:");
pHead=reaser();
for(pTemp=pHead;pTemp!=NULL;pTemp=pTemp->pNext)
if(!strcmp(pTemp->name,user_name))
if(strcmp(pTemp->password,p))
{
k=1;
printf("\n\t\t\tYour password is wrong!");
printf("\n\t\t\t\tPress any key to EXIT...");
getch();
exit(0);
}//if_else
}//psw
int main()
{
int Res;
clrscr();
printf("\n\n\n\n\n\n\n\n");
printf("\n\t*****************************************************************");
printf("\n\t* courses System *");
printf("\n\t* *");
printf("\n\t* QiuYong No.20052419 *");
printf("\n\t* *");
printf("\n\t* 2006-7-20 *");
printf("\n\t*****************************************************************");
printf("\n\t\t\t\t\t\tPress any key to countinue...");
getch();
START:
Res=login();
if(Res==0)goto End;
else if(Res==3)Help();
else Psw(Res);
goto START;
End:
clrscr();
printf("\n\n\n\n\n\n\t\t\tGoodBye ^_^");
return 0;
}
❺ 怎樣用c語言做一個學生選課系統
:=
=其實比較簡單,用c++,java,c#都可以做,就是用面向對象方法的編程語言就可以了.資料庫可以選用SQL.看一下書很快就可以做出來了,這個是很簡單的程序的
❻ c語言學生選課管理系統
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LEN sizeof(struct course)
#define FORM "%d %s %s %d %d %d %d %d"
#define FORM1 "%5d%20s%20s%5d%5d%5d%5d%5d\n"
#define INPUT &p1->num,p1->name,p1->kind,&p1->all_time,&p1->class_time,&p1->experiment_time,&p1->grade,&p1->term
#define OUTPUT p1->num,p1->name,p1->kind,p1->all_time,p1->class_time,p1->experiment_time,p1->grade,p1->term
struct course
{int num;
char name[20];
char kind[10];
int all_time;
int class_time;
int experiment_time;
int grade;
int term;
//int flag;
struct course *next;};
void mune() //菜單函數
{
printf("************************************\n");
printf("如果錄入信息,請選擇1\n");
printf("如果瀏覽信息,請選擇2\n");
printf("如果按學分查詢課程,請選擇3\n");
printf("如果按課程性質查詢課程,請選擇4\n");
printf("如果按選修課程查詢,請選擇5\n");
printf("如果想進行選課,請選擇6\n");
printf("如果想退出,請選擇0\n");
printf("*************************************\n");
}
struct course* scan(FILE*fp) //輸入課程信息
{
struct course*head; //鏈表頭指針
struct course*p1,*p2; //指示指針
int n=0;
p1=p2=(struct course*)malloc(LEN); //開辟內存空間
printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf("請輸入數據:");
scanf(FORM,INPUT); //輸入數據
fprintf(fp,FORM1,OUTPUT);
head=NULL;
while(p1->num!=0) //鏈表結束的判斷條件
{n=n+1;
if(n==1)
head=p1; //當在第一個結點時,頭指針等於第一個結點的首地址
else
p2->next=p1;
p2=p1;
p1=(struct course*)malloc(LEN); //繼續開辟內存空間
printf("請輸入數據:");
scanf("%ld",&p1->num); //輸入課程號
if(p1->num!=0) //判斷課程號是否為0,如果為0,程序結束
{scanf("%s %s %d %d %d %d %d",p1->name,p1->kind,&p1->all_time,&p1->class_time,&p1->experiment_time,&p1->grade,&p1->term);
//p1->flag=0;
fprintf(fp,FORM1,OUTPUT);}
}
p2->next=NULL; //最後一個結點的值為空
fclose(fp); //關閉文件
return(head); //返回頭指針
}
void print(struct course*head) //將輸入的內容顯示在屏幕上
{
struct course*p1;
if(head!=NULL) //如果頭指針為空,則程序結束
p1=head;
else
goto end;
printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
do
{printf(FORM1,OUTPUT); //輸出內容
p1=p1->next; //指針指向下一個結點
}while(p1!=NULL);
end:;
}
void search_grade(struct course*head) //按學分查詢課程
{
struct course*p1;
int k,n;
n=0;
p1=head;
printf("請輸入查詢課程的學分:\n");
scanf("%d",&k);
while(p1!=NULL) //根據鏈表裡面的內容輸出
{if(k==p1->grade)
{printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT);
n++;}
p1=p1->next;}
if(n==0)
printf("無結果\n"); //如果沒有課程,則輸出無結果
}
void search_kind(struct course*head)//按課程性質查詢
{
char a[10];
int n=0;
struct course*p1;
p1=head;
gets(a);
while(p1!=NULL)
{if(strcmp(a,p1->kind)==0) //用strcmp函數進行字元串的比較
{printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT); //如果相同,輸出課程信息
n++;}
p1=p1->next;}
if(n==0)
printf("無結果\n");
}
void search_else(struct course*head) //查詢所有選修課程
{
struct course*p1;
int n=0;
p1=head;
while(p1!=NULL)
{if(strcmp(p1->kind,"xuanxiu")==0)
{printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT);
n++;}
p1=p1->next;
}
if(n==0)
printf("沒有選修課程\n");
}
void choose(struct course*head) //選課函數
{
struct course*p1;
int k,s=0; //s為所選課程的學分總數,K為所選課程的課程編號
if(head!=NULL)
{p1=head;
while(s<60) //判斷選課是否結束
{
p1=head;
printf("請輸入選擇課程的課程編號:");
scanf("%d",&k);
while(p1!=NULL) //當遍歷一遍鏈表之後,循環結束
{
if(k==p1->num) //當找到對應的課程編號後,輸出課程信息
{s=s+p1->grade;
printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT);
printf("選課成功!\n");
break;}
else
p1=p1->next;
if(p1==NULL) //鏈表走到最後,則沒有找到相應課程
printf("沒有這門課程\n");
}
}
printf("學分達到要求\n");
}
}
void main()
{ struct course*head;
FILE*fp;
int k;
fp=fopen("課程list.txt","a+");
loop:mune(); //goto循環的開始位置
printf("請輸入你的操作:\n");
scanf("%d",&k);
if(k!=0)
{switch(k) //利用switch語句實現菜單式工作
{case 1:head=scan(fp);break;
case 2:print(head);break;
case 3:search_grade(head);break;
case 4:search_kind(head);break;
case 5:search_else(head);break;
case 6:choose(head);break;
default:printf("操作不存在");}
goto loop;} //利用goto語句實現循環
}
自己做的,比較粗糙...用的頭指針作為參數,所以只能一次性執行完~~~
❼ 用數據結構(c語言版)編寫的學生選課系統
根據自己的需要,自己看著修改一下 ^^
#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
p2->next=NULL;
}
void inputc()//錄入課程主函數
{
int i;
printf("\t\t\t錄入課程信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1) head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1) head1=p1->next;
else p2->next=p1->next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
}
p2->next=NULL;
}
void inputs()//錄入學生信息主函數
{
int i;
printf("\t\t\t錄入學生信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2) head2=p1->next;
else p2->next=p1->next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1) p=p->next;
(p->nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s->next!=NULL) s=s->next;
if(s->num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",&num1);
p1=head1;
while(p1->num1!=num1) p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",&num2);
p=head2;
while(p->num2!=num2 && p!=NULL) p=p->next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p->nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i]) p0=p0->next;
f=f+p0->score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續退課(y/n)?");
getchar();
c=getchar();
(p->nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
p=p->next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
void store()//信息主函數
{
int i;
printf("\t\t系統信息查看及存儲\n");
printf("1.查看課程信息\n");
printf("2.查看學生信息\n");
printf("3.存儲信息\n");
printf("4.返回主菜單\n");
printf("請輸入(1~4):\n");
scanf("%d",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統!\n");
printf("菜單:\n");
printf("1.錄入課程信息\n");
printf("2.課程管理\n");
printf("3.錄入學生信息\n");
printf("4.學生信息管理\n");
printf("5.學生選課\n");
printf("6.系統信息查看及存儲\n");
printf("7.退出系統\n");
printf("\n請輸入菜單選項(1~7):\n");
scanf("%d",&i);
if(i<1 || i>7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統!\n\n再見!\n");
}
}
return(0);
}
❽ C語言學生選修課系統
//7《學生選修課程系統》設計任務
//(1)輸入功能:輸入30名學生學號、班級、姓名、選修課名稱。
//(2)設置要求:每個學生至少選修3科,總選修科目至少設置15科。
//(3)查詢功能:按學號、姓名、選修課顯示各選修課上課時間和地點。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct subjects
{
int num;
char na[10];
char teacher[20];
char wtime[10];
char ttime[10];
int score;
struct subjects *next;
}SUB;
SUB *create_form()
{
SUB *head,*tail,*p;
int num,score;
char na[10],teacher[20],wtime[10],ttime[10];
head=tail=NULL;
printf(" 輸入選課程信息,以6個0結束:\n");
printf(" 課程代碼 課名 任教老師 上課星期 上課時間 學分\n");
scanf("%d%10s%14s%10s%8s%6d",&num,&na,&teacher,&wtime,&ttime,&score);
while(num!=0)
{
p=(SUB*)malloc(sizeof(SUB));
p->num;
strcpy(p->na,na);
strcpy(p->teacher,teacher);
strcpy(p->wtime,wtime);
strcpy(p->ttime,ttime);
p->score=score;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d%s%s%s%s%d",&num,&na,&teacher,&wtime,&ttime,&score);
}
tail->next=NULL;
return head;
}
void savefile(SUB*head)
{
SUB *p;
FILE *fp;
fp=fopen("subjects.txt","w");
fprintf(fp,"歡迎進入東華理工大學2008-2009學年選修課系統(4-13)\n");
fprintf(fp,"課程代碼 課名 任教老師 上課星期 上課時間 學分\n");
for(p=head;p;p->next)
fprintf(fp,"%6d%10s%14s%10s%8s%6d",p->num,p->na,p->teacher,p->wtime,p->ttime,p->score);
fclose(fp);
}
void prin(SUB *head)
{
SUB *p;
if (head==NULL)
{
printf("沒有選修課程記錄!\n");
return;
}
printf("歡迎進入東華理工大學2008-2009學年選修課系統(4-13)\n");
printf("課程代碼 課名 任教老師 上課星期 上課時間 學分\n");
for(p=head;p;p->next)
printf("%6d%10s%16s%12s%12s%d",p->num,p->na,p->teacher,p->wtime,p->ttime,p->score);
}
SUB *inset(SUB *head)
{
SUB *ptr,*ptr2,*subj;
char ch, ch1;
printf("是否進行插入課程,如果需要插入請按回車建,不進行按空格結束!\n");
ch=getchar();
while(ch!=' '){
subj=(SUB*)malloc(sizeof(SUB));
ptr=subj;
printf(" 輸入要插入的課程信息:\n");
scanf("%d%s%s%s%s%d",subj->num,subj->na,subj->teacher,subj->wtime,subj->ttime,subj->score);
if(head==NULL){
head=ptr;
head->next=NULL;
}
else{
for(ptr2=head;ptr2;ptr2=ptr2->next)
if(ptr2->next==NULL){
ptr2->next=subj;
subj->next=NULL;
break;
}
ch='a';
}
printf("繼續請按回車建,結束請按空格:\n");
ch1=getchar();
ch=getchar();
}
return head;
}
SUB *del(SUB *head)
{
SUB*p1,*p2;
char ch,ch1;
int num;
printf("是否進行課程刪除,要刪除請按回車鍵,不進行請按空格:\n");
ch=getchar();
while(ch!=' ')
{
printf("輸入要刪除的課程代碼:\n");
scanf("%d",&num);
if(head->num==num){
p2=head;
head=head->next;
free(p2);
}
if(head==NULL)
return NULL;
p1=head;
p2=head->next;
while(p2!=NULL){
if(p2->num==num){
p1->next=p2->next;
free(p2);
}
else
p1=p2;
p2=p1->next;
}
printf("繼續刪除請按回車鍵,結束請按空格:\n");
ch1=getchar();
ch=getchar();
}
return head;
}
typedef struct student
{
int number;
int classes;
char chinesename[16];
char title [5][12];
struct student *other;
}STU;
void scanf_form(SUB *head)
{
int i,count,number,classes;
char ch,title[3][12],chinesename[16];
scanf("%d%d%16s",&number,&classes,&chinesename);
for(i=0;i<5;i++)
{
scanf("%s",&title[i]);
count++;
if(count==3)
{
ch=getchar();
if(ch!=' ')
{title[3][12]='0';
title[4][12]='0';
i=5;
ch='a';
}
}
if(count==4)
{
ch=getchar();
if(ch!=' ')
{title[4][12]='0';
i=5;
ch='a';
}
}
for(i=0;i<5;i++)
{
if(strcmp(title[i][12],head->na)!=0 && title[i][12]!='0')
{ printf("你輸入的課程名不正確,請從新輸入:\n");
scanf_form();
}
}
}
}
STU *study_form(SUB*head)
{
STU *hand,*tall,*q;
int i;
char ch,ch1;
hand=tall=NULL;
printf("輸入你個人信息,及選修的課名,以4個0結束:\n");
printf("註:每個學生至少選修3門課,大於3門時按回車鍵繼續,空格結束:\n");
scanf_form();
while(number!=0)
{
q=(STU*)malloc(sizeof(STU));
q->number=number;
q->classes=classes;
strcpy(p->chinesename,chinesename);
for(i=0;i<5;i++)
strcpy(p->title[i],title[i][12]);
if(hand=NULL)
hand=q;
else
tall->other=q;
tall=q;
scanf_form();
for(i=0;i<5;i++)
{
if(strcmp(title[i][12],head->na)!=0&&titli[i][12]!='0')
{ printf("你輸入的課程名不正確,請從新輸入:\n");
scanf_form();
}
}
tall->other=NULL;
return hand;
}
}
void savefiles(STU*hand)
{
STU *q;
FILE *fq;
fq=fopen("studennt.txt","w");
fprintf(fq, "學生選課信息表:\n");
for(q=hand;q;q=q->other)
fprintf(fq,"%16d%10d%16s%16s%16s%16s%16s%16s",q->number,q->classes,q->chinesename,q->title[0],q->title[1],q->title[2],q->title[3],q->title[4]);
fclose(fq);
}
void prins(STU*hand)
{
STU *q;
if(head==NULL)
{
printf("沒有學生選課信息記錄!\n");
return;
}
printf("學生選課信息一覽表:\n");
printf("學號 班級 姓名 課名 :\n");
for(q=hand;q;q->number)
printf("%16d%10d%16s%16s%16s%16s%16s%16s",q->number,q->classes,q->chinesename,q->title[0],q->title[1],q->title[2],q->title[3],q->title[4]);
}
STU *intserts(SUB*head,STU *hand)
{
STU *prt,*prt2,*stuj;
int i;
char ch,ch1;
printf("是否要進行插入學生選課信息,如果需要請按回車建,結束請按0:\n");
ch=getchar();
while(ch!=' ')
{
stuj=(STU*)malloc(sizeof(STU));
prt=stuj;
printf("輸入要插入的學生選課信息:\n");
scanf_form();
if(hand==NULL)
{hand=prt;
hand->other=NULL;
}
else
{for(prt2=hand;prt2;prt2=prt2->other)
if(prt2->other==NULL)
{prt2->other=stuj;
stuj->other=NULL;
break;
}
ch='a';
}
printf("繼續插入請按回車建,結束請按空格:\n");
ch1=getchar();
ch=getchar();
}
return hand;
}
STU *dells(STU *hand)
{
STU *q1,*q2;
char ch,ch1;
int number;
printf("是否進行學生選課信息刪除,要刪除請按回車建,不進行請按空格:\n");
ch=getchar();
while(ch!=' ')
{
printf("輸入要刪除的學號:\n");
scanf("%d",&number);
if(hand->number==number)
{
q2=hand;
hand=hand->other;
free(q2);
}
if(hand=NULL)
return NULL;
q1=hand;
q2=hand->other;
while(q2)
{if(q2->number==number)
{q1->other=q2->other;
free(q2);
}
else
q1=q2;
q2=q1->other;
}
printf("繼續刪除請按回車建,結束請按空格:\n");
ch1=getchar();
ch1=getchar();
}
return hand;
}
void search(STU*hand)
{
int a,number;
int t=1;
char type[10],ch,ch1;
STU *prt;
printf("是否進入查詢,按回車鍵進入,空格結束:\n");
ch=getchar();
while(ch!=' ')
{
printf("請輸入要查詢的學號:\n");
for(prt=hand;prt;prt=prt->other)
{
if(number=prt->number)
{printf("%16d%10d%16s%16s%16s%16s%16s%16s",prt->number,prt->classes,prt->chinesename,prt->title[0],prt->title[1],prt->title[2],prt->title[3],prt->title[4]);
t=0;
}
if(t!=0)
printf("未找到!\n");
t=1;
}
printf("繼續查找請按回車鍵,結束請按空格鍵:\n");
ch1=getchar();
ch=getchar();
}
}
void main()
{
SUB *head=create_form() ;
savefile(head);
prin(head);
head= inset(head);
head= del(head);
STU *hand=study_form(head);
savefiles(hand);
prins(hand);
hand=intserts(head,hand);
hand=dells(hand);
search(hand);
}