1、 int score; /学分 int term; /开课学期 struct subjects *next;SUB;SUB *head=NULL;四、程序分析现代的社会是信息化的社会,信息无所不在。在生产领域、流通领域、各个部门每天都和信息打交道,如何处理如此多的信息成为了一个重要的课题。学生在学期开始选课是教学活动中的一个重要环节,该环节如果能管理好,它不仅能加快学生的选课速度,也提高了整个活动的效率。 大学一般都有上千名学生,每学期开始学生都要选课,因而产生了大量的课程信息。考虑到用户使用的方便和处理的信息量系统要完成录入,保存,查询,修改和删除课程信息的各种过程,能打印出课程信息表。对象
2、: 系统的主要使用对象是需要选课的学生。学生在选课是要察看各个课程的详细信息,还要选择一些感兴趣的课程,需要生成课表,在发现课程有冲突后能够修改先前选择的信息。需要随学生选课的变化,计算相应的总学分。在全部选定后,打印报表。系统还需要管理员来查看和修改学生的总体选课情况课程信息和学生信息。五、程序设计大纲六、模块设计(一) 主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块:程序#include stdio.hstring.hstdlib.h#includemalloc.hvoid prin1();void choose();ty
3、pedef struct subjects /课程结构体 /开课学期int main() int n,w=1; do system(cls); puts(nntt*MENU*nnputs(tttt1.以管理员身份登录ntttt2.以学生身份登录ntttt3.退出nntt*nprintf(Chiose your number(1-3): bbscanf(%d,&n);switch(n) case 1:Mangers() ;break; case 2:Students(); case 3:w=0; default:; while(w=1); return 0;(二) 管理员功能模块管理员的功能一共
4、有四个功能:浏览,查询,添加,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用:void Mangers() int n,w=1,flag=0,i=3; char s8; char password7=1 printf(nnEnter password: scanf(%s,s); if(!strcmp(s,password) /进行密码匹配验证 flag=1; break; elsennError! You only have %d times! Enter again:n,i-1); i-; while(i0);flag) printf(you have En
5、ter 3 times! /输入密码超过了3次! exit(0); /自动退出 system( puts(nntt*管理员菜单*nntttt1-浏览课程ntttt2-查询课程ntttt3-添加课程ntttt4-删除课程ntttt5-返回主菜单nntt*nChiose your number(1-5): switch(n)prin();search();insert();savefile(); case 4:del(); case 5:return;void Students()nntt*学生菜单*nntttt1-浏览所有课程ntttt2-查询课程信息ntttt3-选择选修课程ntttt4-浏览
6、我选修的课程ntttt5-删除错选课程ntttt6-返回主菜单nntt*nChiose your number(1-6):choose();prin1();savefile1(); case 6:(三) 学生功能菜单学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数:void Students() /学生登录菜单nntt*学生菜单*nnnntt*n(四) 创建链表模块SUB *create_form() /创建链表 SUB *head,*tail,*p; int num,stime,ttime; int
7、etime,score,term; char name20,kind10; int size=sizeof(SUB); head=tail=NULL;输入选修课程信息:%d%s%s%d%d%d%d%dnum,name,kind,&stime,&ttime,&etime,&score,&term); while(num!=0) p=(SUB *)malloc(size); p-num=num; strcpy(p-name,name);kind,kind);stime=stime;ttime=ttime;etime=etime;score=score;term=term; if(head=NULL
8、) head=p; else tail-next=p; tail=p; tail-next=NULL; return head;(五) 浏览模块浏览模块主要用管理员中的“浏览课程”和学生功能中的“浏览所有所有课程”,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出:void prin() /浏览所有课程 SUB *ptr; head=NULL; readfile(); if(head=NULL)nnt*NO RECORDS!*n return;课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n for(ptr=head;ptr;ptr=ptr
9、-next) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-pausevoid prin1() /浏览所有已选修课程 FILE *fp; if(fp=fopen(3.txt,r)=NULL)Cannot open file.n choose(); while(!feof(fp) ptr=(SUB*)malloc(sizeof(SUB); fscanf(fp,%d%s%s%d%d%d%d%dnptr-kind,&(六) 查询模块查询
10、模块主要用于管理员功能中的“查询课程”和学生功能模块中的“查询所有课程”,查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找switch语句中,每一个case语句就是一中查询方法:void search() /课程信息查询 int a,num; int t=1; char type10,min10; L1:system(nntt*请选择查询方式*nnttt1-按课程名称查找nnttt2-按课程性质查找nnttt3-按学分查找nnttt4-退出查找nnntt*nnnChiose your number(1-4):a); switch(a)请输入要查找的课程的名称: scanf
11、(,min); for(ptr=head; if(strcmp(min,ptr-name)=0) printf( t=0; if(t) printf(tn未找到! t=1; system( goto L1; case 2:请输入要查找的课程的性质: scanf(,type); for(ptr=head; if(strcmp(type,ptr-kind)=0) case 3:输入要查找的课程的学分:num); if(ptr-score=num)nt未找到! t=0;if(t) t=1;goto L1;case 4: /退出查找(七) 插入链表模块插入链表操作主要用于添加课程,在整个课程信息中加入
12、一些新课程,它在添加模块中被调用:void *myInsert(SUB *subj) /链表插入操作 SUB *ptr,*ptr2; ptr=subj; if(head=NULL) head=ptr; head- else for(ptr2=head;ptr2;ptr2=ptr2- if(ptr2-next=NULL) ptr2-next=subj; subj- break; return head;(八) 添加模块添加模块主要用于增加课程信息,采用链表的操作:void *insert() /插入课程信息 SUB *ptr,*subj; char ch,ch1; while(ch!=0)sub
13、j=(SUB *)malloc(size);ptr=subj;输入要插入的课程信息:ntt 请输入课程编号:subj-ntt请输入课程名称:name);ntt 请输入课程性质:kind);ntt请输入总学时:stime);ntt请输入授课学时:ttime);ntt请输入实践或上机学时:etime);ntt请输入学分:score);ntt请输入开课学期:myInsert(subj);nn继续插入请按回车nn结束添加课程按 0: bbch1=getchar(); /*将回车键赋给CH1,否则subj-term输完后输入的回车键会赋给CH,因此用CH1填补。*/ch=getchar();(九) 删除模块删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作:void *del() /删除课程- SUB *p1,*p2;输入想要删除的课程编号: bbbbb if(head-num
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1