1、#include #include#includeint N1,N2;struct couse * head1;struct student * head2;struct couse/课程信息结构体 int num1;/课程编号char name120;/课程名称char type20;/课程性质int hour;/总学时int teach;/上课学时int exp;/实验上机学时int credit;/学分int semester;/开课学期 int nelepeo;/课程已选人数int Melepeo; /课程上限 struct couse * next;struct student/学生
2、信息结构体 int num2;/学号 char name220;/姓名int nelenum50;/已选课程编号char nelename1020;/已选名称 int nelen; /已选课程数量int score; /总学分int gainscore; /已获得的学分 struct student * next;void manger();void student();void managementc();void managements();void manage();void main();void intoc() /存储课程信息FILE * fp;struct couse * p;ch
3、ar filepath30;printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n);printf(输入途径:);getchar();gets(filepath);if(fp=fopen(filepath,w)=NULL)printf(无法储存!);exit(0);p=head1;while(p!=NULL)fprintf(fp,%d%s%s%d%d%d%d%d%d%dn,p-num1,p-name1,p-type,p-hour,p-teach,p-exp,p-credit,p-semester,p-nelepeo,p-Melepeo);p=p-
4、next;fclose(fp);printf(已储存入%s文献!n,filepath);void keyboardc()/录入课程子函数(从键盘录入)struct couse *p1,*p2;N1=0;p1=p2=(struct couse*) malloc(sizeof(struct couse);printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n); printf(编号名称性质总学时上课学时实验上机学时学分开课学期已选人数课程上限n);scanf(%d %s %s %d %d %d %d %d %d %d,&p1-num1,p1-name1,
5、&p1-type,&p1-hour,&p1-teach,&p1-exp,&p1-credit,&p1-semester,&p1-nelepeo,&p1-Melepeo); 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 %s %d %d %d %d %d %d %d,&p1-num1,p1-name1,p1-type,&p1-hour,&p1-t
6、each,&p1-exp,&p1-credit,&p1-semester,&p1-nelepeo,&p1-Melepeo); p2-next=NULL;void filec()/录入键盘子函数(从文献录入) FILE * fp; char filepath20; struct couse *p1,*p2; N1=0;printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(输入要读入的文献途径:); getchar(); gets(filepath); if(fp=fopen(filepath,rb)=NULL) printf(找
7、不到%s文献!n,filepath); exit(0); p1=p2=(struct couse*)malloc(sizeof(struct couse); fscanf(fp,%d%s%s%d%d%d%d%d%d%d,&p1-num1,p1-name1,p1-type,&p1-hour,&p1-teach,&p1-exp,&p1-credit,&p1-semester,&p1-nelepeo,&p1-Melepeo); head1=NULL; while(!feof(fp) N1=N1+1; if(N1=1)head1=p1; else p2-next=p1; p2=p1; p1=(stru
8、ct couse * )malloc(sizeof(struct couse); fscanf(fp,%d%s%s%d%d%d%d%d%d%d,&p1-num1,p1-name1,p1-type,&p1-hour,&p1-teach,&p1-exp,&p1-credit,&p1-semester,&p1-nelepeo,&p1-Melepeo); p2-next=NULL;void inputc()/录入课程主函数 int i;printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(ttt录入课程信息n); printf(ntt
9、t1.从键盘录入n); printf(ttt2.从文献录入n); printf(ttt3.返回上一菜单n); printf(请选择(13):); scanf(%d,&i); switch(i) case(1):system(cls);keyboardc();system(cls);inputc();break; case(2):system(cls);filec();system(cls);inputc();break; case(3):system(cls);managementc();break; void insertc(int num2)/课程管理子函数(修改课程)struct cou
10、se *p1,*p2; if(head1=NULL) printf(nttt没有课程,无法修改!n); goto end; p1=head1; while(num2!=p1-num1 & p1-next!=NULL) p2=p1; p1=p1-next; if(num2=p1-num1) printf(ttt请重新输入数据进行修改n);printf(课程编号课程名称课程性质总学时上课学时实验上机学时学分开课学期课程已选人数课程上限n);scanf(%d %s %s %d %d %d %d %d %d %d %d,&p1-num1,p1-name1,p1-type,&p1-hour,&p1-te
11、ach,&p1-exp,&p1-credit,&p1-semester,&p1-nelepeo,&p1-Melepeo);printf(ttt已修改该课程n); else printf(ttt无该编号的课程!n); end:;void delc(int num1)/课程管理子函数(删除课程) struct couse *p1,*p2; if(head1=NULL) printf(nttt没有课程,无法删除!n); goto end; p1=head1; while(num1!=p1-num1 & p1-next!=NULL) p2=p1; p1=p1-next; if(num1=p1-num1
12、) if(p1=head1) head1=p1-next; else p2-next=p1-next; printf(已删除该编号课程!n); N1=N1-1; else printf(无该编号的课程!n); end:;void managementc()/课程管理主函数 int i,num1,num2=1;printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(ttt课程管理n);printf(ttt1.添加课程n); printf(ttt2.修改课程n); printf(ttt3.删除课程n);printf(ttt4.存储课
13、程信息n); printf(ttt5.返回上一菜单n); printf(请选择(15):); scanf(%d,&i); switch(i) case(1):system(cls);inputc();system(cls);break; case(2): system(cls);printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n);printf(请输入要修改的课程编号:n);scanf(%d,&num2);insertc(num2);managementc();system(cls); break; case(3): system(cls);
14、printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(请输入要删除课程的编号:n); scanf(%d,&num1); delc(num1);managementc();system(cls); break; case(4):system(cls);intoc();managementc();break; case(5):system(cls);manage();break; void intos() /存储学生信息FILE * fp;struct student * p;char filepath30;printf(ttt*
15、n); printf(ntttt欢迎使用此系统!n); printf(ttt*n);printf(请输入途径:);getchar();gets(filepath);if(fp=fopen(filepath,wb)=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 keyboards()/录入学生信息子函数(从键盘录入) int i; struct studen
16、t *p1,*p2; N2=0; p1=p2=(struct student *)malloc(sizeof(struct student);printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(学生学号t学生姓名t总学分n); scanf(%d %s %d,&p1-num2,p1-name2,&p1-score);p1-nelen=0;p1-gainscore=0; for(i=0;inelenumi=0; head2=NULL; while(p1-num2!=0) N2=N2+1; if(N2=1)head2=p1; el
17、se p2-next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student); scanf(%d %s %d,&p1-num2,p1-name2,&p1-score);p1-nelen=0;p1-gainscore=0; for(i=0;inelenumi=0; p2-next=NULL;void files()/录入学生信息子函数(从文献录入) int i=0; FILE * fp; char filepath20; struct student *p1,*p2; N2=0;printf(ttt*n); printf(nt
18、ttt欢迎使用此系统!n); printf(ttt*n); printf(输入要读入的文献途径:); getchar(); gets(filepath); if(fp=fopen(filepath,rb)=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; e
19、lse 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(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(ttt录入学生信息n); printf(nttt1.从键盘录入n); printf(ttt2.从文献录入n); printf(ttt3.返回上一菜单n); pri
20、ntf(请选择(13):n); scanf(%d,&i); switch(i) case(1):system(cls);keyboards();system(cls);inputs();break; case(2):system(cls);files();inputs();break; case(3):system(cls);managements();break; void inserts(int num3)/学生信息管理子函数(修改学生信息)int i;struct student *p1,*p2; if(head2=NULL) printf(nttt没有该学生信息,无法修改!n); go
21、to end; p1=head2; while(num3!=p1-num2 & p1-next!=NULL) p2=p1; p1=p1-next; if(num3=p1-num2) printf(ttt重新修改数据); printf(ttt学生学号t学生姓名); scanf(%d %s %d,&p1-num2,p1-name2,&p1-score); p1-nelen=0;p1-gainscore=0; for(i=0;inelenumi=0; printf(ttt修改完毕); else printf(ttt无该学号的学生!n); end:;void dels(int num2)/学生信息管理
22、子函数(删除学生信息) struct student *p1,*p2; if(head2=NULL) printf(nttt没有该学生信息,无法删除!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(ttt已删除该学生信息!n); N2=N2-1; else printf(ttt无该学号的学生!n); end:;void managemen
23、ts()/学生信息管理主函数 int i,num2,num3;printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n); printf(ttt学生信息管理n); printf(ttt1.添加学生信息n);printf(ttt2.修改学生信息n); printf(ttt3.删除学生信息n);printf(ttt4.存储学生信息n); printf(ttt5.返回上一菜单n); printf(请选择(15):n); scanf(%d,&i); switch(i) case(1):system(cls);inputs();system(cls);bre
24、ak; case(2): system(cls);printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n);printf(请输入要修改学生的学号:n); scanf(%d,&num3); inserts(num3);managements(); break; case(3): system(cls);printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n);printf(请输入要删除学生的学号:n); scanf(%d,&num2); dels(num2);managements(); break;
25、 case(4):system(cls);intos();managements();break; case(5):system(cls);manage();break; void manage() /信息管理函数int i;printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n);printf(ttt信息管理);printf(nttt1.课程信息管理);printf(nttt2.学生信息管理);printf(nttt3.返回上一菜单);printf(n请输入1-3:);scanf(%d,&i);switch(i)case 1:system(cls)
26、;managementc();break;case 2:system(cls);managements();break;case 3:system(cls);manger();break;void listc() /浏览课程信息struct couse * p;p=head1;printf(ttt*n); printf(ntttt欢迎使用此系统!n); printf(ttt*n);printf(课程编号 课程名称 课程性质 总学时 授课学时 上机学时 学分 开课学期 n);while(p!=NULL)printf(num:%6dname:%13s%13s%10d%7d%7d%12d%5d%5d
27、n,p-num1,p-name1,p-type,p-hour,p-teach,p-exp,p-credit,p-semester);p=p-next;void search1() /按学号查找学生信息int a,b;struct student *p;printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n);printf(ttt请输入学生学号);scanf(%d,&a);p=head2;printf(学号 学生姓名 所选课程编号 所选课程学分n);while(p!=NULL)if(p-num2=a)printf(%6d%13s ,p-num2,p-n
28、ame2);for(b=0;p-nelenumb!=0&bnelenumb);printf(%10dn,p-nelen);p=p-next;void search2() /按课程学分查询int b;struct couse *p;printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n);printf(ttt请输入课程学分:);scanf(%d,&b);p=head1;printf(课程号 课程名 课程性质 课程学分 选课人数n);while(p!=NULL)if(b=(p-credit)printf(%6d%13s%12s%12d%12d,p-num
29、1,p-name1,p-type,p-credit,p-nelepeo);p=p-next;void search3() /按课程性质查询char typ20;struct couse *p;printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n);printf(请输入要查找的课程性质:);printf(选修/必修n);scanf(%s,typ);p=head1;printf(课程编号t课程名t课程性质t学分t选课人数n);while(p!=NULL)if(strcmp(typ,(p-type)=0)printf(%6d%13s%12s%12d%12
30、d,p-num1,p-name1,p-type,p-credit,p-nelepeo);p=p-next;void search4() /选课人数记录 struct couse * p;p=head1;printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n);printf(课程编号t课程名t课程性质t选课人数n);while(p!=NULL)printf(%6d%13s%12s%12d ,p-num1,p-name1,p-type,p-nelepeo);p=p-next;void searchguanliyuan() /管理员信息查找函数int i;printf(ttt*n);printf(ntttt欢迎使用此系统!n);printf(ttt*n);printf(ttt学生信息查找);printf(nttt1.按学号查找);printf(nttt2.学分查询);printf(nttt3.按课程性质查询);printf(nttt4.记录各门课程选修人数);printf(nttt5.返回上一级菜单);printf(n请输入1-5:);scanf(%d,&i);switch(i)case 1:system(cls);search1();searchguanliyuan();break;c