1、(4) 查询功能(至少一种查询方式)算法。(5) 按学分查询。(6) 某门课程学生选修情况(可选项)。2、分析: 由于题目要求将学生的选课信息用结构体形式输入,并写入文件中,所以应提供文件的输入输出等操作:在过程中需有浏览、插入、修改、查找、删除学生选课信息等操作,顾应分别建立个功能模块;另外还应提供键盘式选择菜单实现程序运行。3、总体设计:根据题目要求,可以将系统分为六个模块:1) 系统以菜单方式工作模块;2) 课程信息与学生选课信息录入功能模块;3) 课程信息浏览功能模块;4) 查询模块;5) 按学分查询模块;6) 某些课程学生选修情况模块。4详细设计:#include stdlib.h
2、主流程图:string.htypedef struct subjects int num; char name20; char kind10; int stime; int ttime; int etime; int score; int term; struct subjects *next;SUB;SUB *create_form() SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name20,kind10; int size=sizeof(SUB);head=tail=NULL;printf(输入选
3、修课程信息:n); scanf(%d %s %s %d %d %d %d %d,&num,&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) head=p; else tail-next=p; tail=p; next=NULL; return hea
4、d;void savefile(SUB *head) SUB *p; FILE *fp; fp=fopen(subjects.txt,wfprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n for(p=head;p;p=p-next)%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p- fclose(fp);void savefileadd(SUB *head)subjectsadd.txt fprintf(fp,void save
5、filedel(SUB *head)subjectsdel.txtvoid prin(SUB *head) SUB *ptr; if(head=NULL) printf(没有此门课程记录! return;课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n for(ptr=head;ptr;ptr=ptr-,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-void search(SUB *head) int a,num; int t=1; char type10; char
6、ch=a,ch1;while(ch!= )若要按课程性质查找请输入1,若要按学分查找请输入2:%da); switch(a) case 1:请输入要查找的课程的性质:%s,type); if(strcmp(type,ptr-kind)=0) t=0; if(t) printf(未找到! t=1; break; case 2:输入要查找的课程的学分nnum); if(ptr-score=num)继续查找请按回车键,结束请按空格键: ch1=getchar(); /将回车键赋给CH1,否则CASE里面最后输入的回车键会赋给CH,因此用CH1填补。 ch=getchar();SUB *insert(
7、SUB *head) SUB *ptr,*ptr2,*subj; while(ch! subj=(SUB *)malloc(size); ptr=subj;输入要插入的课程信息:%d%s%s%d%d%d%d%dsubj-num,subj-name,subj-if(head=NULL) head=ptr; head- else for(ptr2=head;ptr2;ptr2=ptr2- if(ptr2-next=NULL) ptr2-next=subj; subj-继续插入请按回车,结束请按空格: /将回车键赋给CH1,否则subj-term输完后输入的回车键会赋给CH,因此用CH1填补。SUB
8、 *del(SUB *head) SUB *p1,*p2;输入想要删除的课程编号: if(head-num=num) p2=head; head=head-next; free(p2); return NULL; p1=head; p2=head-while(p2) if(p2- p1-next=p2- else p1=p2; p2=p1-继续删除请按回车,结束请按空格: /将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。void choose(SUB *head) SUB *p,*q; int a5; int num,total=0,i=0,j;输入要选修的课
9、程的编号,编号之间以空格分开,输完后以0结束nscanf( if(p- total=total+p-score; ai=num; i+; if(total60) printf(选修总学分未达到60,选修失败!else 选修成功!您选修的课程为: for(j=0;j if(q-num=aj)%s ,q-name);*nvoid main() SUB *head=create_form(); savefile(head); prin(head); search(head); head=insert(head);/注意此处的必要性函数insert的的返回值重新赋给head! savefileadd(
10、head);修改后的信息为: head=del(head); /注意此处的必要性,数del的的返回值重新赋给head! savefiledel(head);修改后的课程信息为: choose(head);运行结果:1 maths bx 15 14 0 25 12 Entg bx 15 14 0 25 13 hh xx 10 8 2 15 14 bb xx 25 14 0 35 10 gg xx 12 10 0 10 1课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期 1 maths bx 15 14 0 25 1 2 Entg bx 15 14 0 25 1 3 hh xx 10 8 2 15 1 4 bb xx 25 14 0 35 11bx2输入要查找的课程的学分15课程设计体会:通过学习和练习C程序的设计基础,学习到了很多关于C的知识。在这次学习过程中,毫无疑问的遇到了很多困惑、疑问,难免心情沮丧,失去耐心,信心受挫,但同学的帮助,老师的解惑和自己的坚持。终于做了出来。看着这一页页的程序,我感受到了成功的喜悦。用一句话来形容一下这几天就是:苦并快乐着。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1