学生选修课程C语言系统设计学生选修课管理系统.doc

上传人:叶*** 文档编号:35114807 上传时间:2022-08-20 格式:DOC 页数:21 大小:1.73MB
返回 下载 相关 举报
学生选修课程C语言系统设计学生选修课管理系统.doc_第1页
第1页 / 共21页
学生选修课程C语言系统设计学生选修课管理系统.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《学生选修课程C语言系统设计学生选修课管理系统.doc》由会员分享,可在线阅读,更多相关《学生选修课程C语言系统设计学生选修课管理系统.doc(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、高级语言程序设计 题 目:学生选修课管理系统 目录1. .题目说明2. .数据结构设计3. .系统大纲4. .模块设计5. .程序代码6. .运行结果7. .小结 学生选修课管理系统假定有n门课程,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课.试设计一选修课程系统,使之能提供一下功能:(1) 系统以菜单方式工作;(2) 课程信息和学生信息的录入功能(课程信息有文件保 存)-输入;(3) 课程信息浏览功能-输出;(4) 查询功能(至少一种查询方式)-算法;(5) 按学分查询;(6) 某门课程学生选修

2、情况(可选项).二:数据结构设计本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找,添加,删除,课程的选修,追加选修的课程.课程信息采用结构体这种数据结构.三:系统大纲学生菜单管理员菜单主 菜 单浏览课程浏览我选修的课程删除错选的课程选择选修课程查询课程信息浏览所有课程删除课程添加课程查询课程四:模块设计(一) 主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块程序#include stdio.h#include string.h#include stdlib.h#includemalloc.htypedef struc

3、t subjects /课程结构体 int num; /课程编号 char name20; /课程名称 char kind10; /课程性质 int stime; /总学时 int ttime; /授课学时 int etime; /实验或上机学时 int score; /学分 int term; /开课学期 struct subjects *next;SUB;SUB *head=NULL;int main()int n,w=1;do system(cls); puts(nntt*MENU*nn);puts(tttt1.以管理员身份登录n);puts(tttt2.以学生身份登录n);puts(t

4、ttt3.退出);puts(nntt*n);printf(Chiose your number(1-3): bb);scanf(%d,&n);switch(n)case 1:Mangers() ;break;case 2:Students();break;case 3:w=0;break;default:; while(w=1); return 0;(二) 管理员功能模块管理员的功能一共有四个功能:浏览,查询,添加,删除课程.运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用.程序void Mangers() /管理员登录菜单 int n,w=1,flag=0,i=3; c

5、har s8; char password7=123456; do printf(nnEnter password:); scanf(%s,s); if(!strcmp(s,password) /进行密码匹配验证 flag=1; break; else printf(nnError! You only have %d times! Enter again:n,i-1); i-; while(i0); if(!flag) printf(you have Enter 3 times!); /输入密码超过了3次! exit(0); /自动退出 do system(cls);puts(nntt*管理员

6、菜单*nn);puts(tttt1-浏览课程n);puts(tttt2-查询课程n);puts(tttt3-添加课程n);puts(tttt4-删除课程n);puts(tttt5-返回主菜单); puts(nntt*n);printf(Chiose your number(1-5): bb);scanf(%d,&n); switch(n) case 1:insert();savefile();break; case 2:prin();break; case 3:search();break; case 4:del();savefile();break; case 5:return; defau

7、lt:; while(w=1);(三) 学生功能菜单学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数程序void Students() /学生登录菜单int n,w=1; do system(cls); puts(nntt*学生菜单*nn); puts(tttt1-浏览所有课程n);puts(tttt2-查询课程信息n); puts(tttt3-选择选修课程n); puts(tttt4-浏览我选修的课程n); puts(tttt5-删除错选课程n); puts(tttt6-返回主菜单);puts(nnt

8、t*n); printf(Chiose your number(1-6): bb); scanf(%d,&n); switch(n) case 1:prin();break; case 2:search();break; case 3:choose();break; case 4:prin();break; case 5:del();savefile1();break; case 6:return; default:; while(w=1);(四) 创建链表模块程序SUB *create_form() /创建链表 SUB *head,*tail,*p; int num,stime,ttime;

9、 int etime,score,term; char name20,kind10; int size=sizeof(SUB); head=tail=NULL; printf(输入选修课程信息: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); strcpy(p-kind,kind); p-stime=stime; p-ttime=ttime; p-etime

10、=etime; p-score=score; p-term=term; if(head=NULL) head=p; else tail-next=p; tail=p;scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term); tail-next=NULL; return head;(五) 浏览模块浏览模块主要用管理员中的”浏览课程”和学生功能中的”浏览所有所有课程”,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出程序void prin() /浏览所有课程SUB *ptr;head=N

11、ULL;readfile();if(head=NULL)printf(nnt*NO RECORDS!*n);return;printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-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-term);system(pause);(六) 查询模块查询模块主要用于管理员功能中的”查询课程”和学生功能

12、模块中的”查询所有课程”,查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找.switch语句中,每一个case语句就是一中查询方法程序void search() /课程信息查询 int a,num; int t=1; char type10,min10; SUB *ptr; L1:system(cls);printf(nntt*请选择查询方式*n); printf(nttt1-按课程名称查找n); printf(nttt2-按课程性质查找n); printf(nttt3-按学分查找n); printf(nttt4-退出查找n); printf(nntt*n); print

13、f(nnChiose your number(1-4): bb); scanf(%d,&a); switch(a) case 1:printf(请输入要查找的课程的名称:); /按课程名称查找scanf(%s,min);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(min,ptr-name)=0)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr

14、-etime,ptr-score,ptr-term);t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; case 2:printf(请输入要查找的课程的性质:); /按课程性质查找scanf(%s,type);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(type,ptr-kind)=0)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind

15、,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; case 3:printf(输入要查找的课程的学分:); /按学分查找 scanf(%d,&num);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(ptr-score=num)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-n

16、ame,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf(nt未找到!n);t=1;system(pause);goto L1;case 4:break; /退出查找(七) 插入链表模块插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用程序void *myInsert(SUB* subj) /链表插入操作 SUB *p1,*p2;p1=subj; if(head=NULL) head=p1; head-next=NULL; else for(p2=head;p2

17、;p2=p2-next)if(p2-next=NULL) p2-next=subj; subj-next=NULL; break; eturn head;(八) 添加模块添加模块主要用于增加课程信息,采用链表的操作程序void *insert() /插入课程信息 SUB *ptr,*subj;int size=sizeof(SUB);char ch,ch1;while(ch!=0)subj=(SUB *)malloc(size);ptr=subj;printf(输入要插入的课程信息:n);printf(ntt请输入课程编号:);scanf(%d,&subj-num); printf(ntt请输

18、入课程名称:);scanf(%s,&subj-name); printf(ntt请输入课程性质:);scanf(%s,&subj-kind); printf(ntt请输入总学时:);scanf(%d,&subj-stime);printf(ntt请输入授课学时:);scanf(%d,&subj-ttime);printf(ntt请输入实践或上机学时:);scanf(%d,&subj-etime);printf(ntt请输入学分:);scanf(%d,&subj-score);printf(ntt请输入开课学期:);scanf(%d,&subj-term);myInsert(subj);prin

19、tf(nn继续插入请按回车n);printf(n结束添加课程按 0: bb);ch1=getchar(); /*将回车键赋给CH1,否则subj-term输完后输入的回车键会赋给CH,因此用CH1填补。*/ch=getchar(); return head;(九) 删除模块删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作程序void *del() /删除课程-SUB *p1,*p2;char ch,ch1;int num;while(ch!=0)printf(输入想要删除的课程编号: bbbbb);scanf(%d,&num);if(head-num=

20、num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-num=num)p1-next=p2-next;free(p2);else p1=p2;p2=p1-next;printf(n继续删除请按回车n);printf(n结束删除课程按 0: bb);ch1=getchar(); /将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。ch=getchar();return head;system(pause);(十) 选修课程模块选

21、修课程模块采用插入链表的操作,程序void choose() /选新课程SUB *p,*q;int a5;int num,total=0,i=0,j;printf(输入要选修的课程的编号,编号之间以空格分开n);scanf(%d,&num);printf(如果确认输入完要选修的课程的编号,请输入0: bb);while(num!=0)for(p=head;p;p=p-next)if(p-num=num)total=total+p-score;ai=num;i+;scanf(%d,&num);if(total60) printf(选修总学分为%d,未达到60,选修失败!n,total);syst

22、em(pause);elseFILE *fp;fp=fopen(my_sub.txt,w);fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-num=aj)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term);fclose(fp);printf(ttn*选修成功!*n);printf(n您选修的课程总学分为%d,课程分别为:n,total);printf(n

23、课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-num=aj)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term);printf(n以上信息全部保存在my_sub.txt中n);system(pause); (十一) 读取文件模块读取文件模块是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入all_sub.txt时,打开所有课程信息的文件,当输入my_

24、sub.txt时,就是浏览学生选修的课程信息程序void readfile() /阅读文件 void *myInsert(SUB*);SUB *newSub; int num,stime,ttime,etime; int score,term; char c,name20,kind10,fname20; printf(请输入课程信息所在的文件名称:);scanf(%s,fname); FILE *fp;fp=fopen(fname,r); while(!feof(fp) if(c=fgetc(fp)=n)break; while(!feof(fp) newSub=(SUB*)malloc(si

25、zeof(SUB);fscanf(fp,%d%s%s%d%d%d%d%dn,&newSub-num,newSub-name,newSub-kind,&newSub-stime,&newSub-ttime,&newSub-etime,&newSub-score,&newSub-term); myInsert(newSub); fclose(fp);(十二) 保存文件模块保存文件模块共分为两个子程序,分别是将修改的信息保存到all_sub.txt和my_sub.txt文件中.程序void savefile() /保存文件(一) SUB *p; FILE *fp; fp=fopen(all_sub.

26、txt,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n);for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(创建后的信息已放入all_sub.txt文件中n); system(pause);void savefile1() /保存文件(二) SUB *p;FI

27、LE *fp;fp=fopen(my_sub.txt,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n); for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(创建后的信息已放入my_sub.txt文件中n); system(pause); :5.程序代码#inc

28、lude stdio.h#include string.h#include stdlib.h#includemalloc.h typedef struct subjects /*课程结构体*/ int num; /*编号*/ char name20; /*名称*/ char kind10; /*性质*/ int stime; /*总学时*/ int ttime; /*授课学时*/ int etime; /*实验或上机学时*/ int score; /*学分*/ int term; /*开课学期*/ struct subjects *next;SUB;SUB *head=NULL;SUB *cr

29、eate_form() /*创建链表*/ SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name20,kind10; int size=sizeof(SUB); head=tail=NULL; printf(输入选修课程信息: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,na

30、me); strcpy(p-kind,kind); p-stime=stime; p-ttime=ttime; p-etime=etime; p-score=score; p-term=term; if(head=NULL) head=p; else tail-next=p; tail=p; scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term); tail-next=NULL; return head;void savefile() /*保存文件一*/ SUB *p; FILE *fp; fp=fope

31、n(1,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n); for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(恭喜,课程修改成功n); system(pause);void *myInsert(SUB* subj) /* 链表插入操作*/ SUB *p1,*p

32、2; p1=subj; if(head=NULL) head=p1; head-next=NULL; else for(p2=head;p2;p2=p2-next) if(p2-next=NULL) p2-next=subj; subj-next=NULL; break; return head;void savefile1() /* 保存文件二 */ SUB *p; FILE *fp; fp=fopen(2,w); if(fp=NULL)exit(0); fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n); for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); system(pause); void readfile() /* 阅读文件? */ FILE *fp; void *myInsert(SUB*); SUB *newSub; char c,fname20; scanf(%s,fname); fp=fopen(fname,r); while(!feof(fp) if(c=fgetc(fp)=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com