C语言课程设计---学生选课系统加源代码_第1页
C语言课程设计---学生选课系统加源代码_第2页
C语言课程设计---学生选课系统加源代码_第3页
C语言课程设计---学生选课系统加源代码_第4页
C语言课程设计---学生选课系统加源代码_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C C 程序设计程序设计课程设计课程设计 目:学生选课系统 名: 号: 绩: 通信工程 1 班 题 专业班级: 姓 学 指导教师: 成 摘要 学生选课系统是一个教育单位不可缺少的重要系统组成部分,它 对于学校的决策者、管理者管理、查看课程来说都有至关重要,所以 学生选课管理系统应该能够为广大学、师生提供充足的信息和快捷的 课程选择过程,有助于学生选好每一门课程,此系统系统选课方便、 快捷,用 简单的界面来展示学生的选课信息,应 用简单明了、存 储量 大、可 靠性高、保 密性好、寿 命长、成 本低等优点,可 以极大的提高 对学生信息管理的效率。利用 C 语言开发,实现了简单的学生课程信 息的录入、修 改、查 询、删 除等操作,并 且能够利用文件系统长久的 保留原始数据。 目录 一、需求分析.1 二、总体设计.1 三、详细设计.2 1、数据定义.错误!未定义书签。 2、算法流程图.2 四、编码.6 五、调试.7 六、设计总结.10 致谢.11 参考文献.12 附录.13 一、需求分析一、需求分析 语言文字描述系统要做什么 数据结构可用结构体, 包括课程和选修两个结构体, 其中课程结构体成员结构体成员包 括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期。 选修结构体成员包括学号, 课程编号, 该结构体的建立主要是为了查询某门课程学生选修情 况。 二、总体设计二、总体设计 系统由哪几个功能模块构成,给出功能模块图。C 中模块化的工具是函数 根据上面的需求分析,可以将这个系统的设计分为如下七大模块: 选课模块、按学分查找模块、按编号查找模块、查看课程模块、查看选课情况模块、课程输 入模块、完成选择模块。 菜单选择模块 录 入 课 程信息 课程 管理 录 入 学 生信息 学生信息 管理 学 生 选 课 系 统 信 息 查 看 及储存 退 出 系 统 完成选择模块 1 三、详细设计三、详细设计 1.数据定义 2,算法流程图 (1)录入课程信息表 2 显示一系列功能选项 输入 n,判断n 是否是 1-7 根据 n 的值调用各功能模块函数 录入课程信息 从文件输入 输入课程编号 保存信息到 student.txt 显示录入成功,转入完成选择菜单 (2)课程管理 Y (3)录入课程信息 保存 录入课程信息 显示失败 输入课程 信息 新 增 课 程 保存 输 入 数 据 Y 3 (4)学生信息管理 Y ,考号.输入姓名 (5)学生选课 学 生 选 课 保存 Y 新增学生信息 或删除学生信息 查 询 可 选 课程 查 询 已 选 课程 返回主 菜单 输 入 学 号输 入 学 号 4 (6)系统信息及查看系统 系统信息及查看系统 主菜单 查看课程信息查看学生信息存储信息返回主菜单 存储课程信存储学生信息返回主菜单 输 入 路 径,保存 (7)退出系统 退出系统 完成选择菜单模块 5 四、编码四、编码 1.struct couse * head1;结构 2. void keyboardc()/录入课程子函数(从键盘录入) 3. void filec()/录入键盘子函数(从文件录入) 4. void inputc()/录入课程主函数 5. void insertc(struct couse *incouse)/课程管理子函数(增加课程) 6. void delc(int num1)/课程管理子函数(删除课程) 7. void elect(struct student * s)/选课 8. void cheak()/学生选课子函数(查询可选课程) 9. void back(struct student * p)/退课 10. void hcheak()/学生选课子函数(查询已选课程) 11.void elective()/学生选课主函数 12.void listc()/输出课程信息 13.void lists()/输出学生信息 14.void intoc()/存储课程信息 15.void intos()/存储学生信息 16.void into()/存储信息 17.void store()/信息主函数 18. int main()/主函数 6 五、测试五、测试 1主菜单 2 2录入课程信息录入课程信息 7 3 3,从文件输入,从文件输入 4 4,学生选课菜单,学生选课菜单 8 5 5,学生信息管理,学生信息管理 6, 6,管理员输入课程信息界面:管理员输入课程信息界面: 9 六、设计总结 问题一:无法读取文 txt 文件。 困难就是 txt 无法读取,输入路径后没有文件显示。 解决办法是,向老师求助。 最后,在老师细心的指导下, 才知道是自己的计算机操作水平缘故,没有很好的 了解计算机路径结构,最后做出了一定的修改,才得以实现。 问题二:程序错误。 这是一个比较典型的错误,通过查阅书本相关资料。才发觉是函数相关问题, 没 有能够很好的理解函数思想,导致程序运行错误。 10 致谢 在这次 c 语言课程设计中,首先得感谢周老师给予我们指导与帮助,在她的 指导帮助下,才使得我们能够顺利的完成课程设计,更重要的是在这次课程设计 中,极大的提高我的 c 语言设计能力,也让我深刻的了解到自己在这方面的诸多 不足,使得我能更清楚的了解自己的水平, 加强了我对这门学科的认识。同时也 感谢和我一起完成这课设的王云龙同学, 我们在互相交流帮助中也相互学习到许 多小的应用技巧,解决了一些列问题。 还要感谢那些给予我们帮助的同学,也给 了我很大的帮助。 11 参考文献参考文献 1姜灵芝,余健. C 语言课程设计案例精编.北京:清华大学出版社,2008 2王新,孙雷. C 语言课程设计.北京:清华大学出版社,2009 3游洪跃、彭骏、谭斌.C 语言程序设计实验与课程设计教程.北京:清华大 学出版社,2011 4王连相.C/C+程序设计上机指导与测试. 北京:中国铁道出版社,2006 5C 语言函数手册,机械工业出版社,1999 12 附录附录 #include #include int N1,N2,kk1,kk2,kk3; struct couse * head1; struct student * head2; struct couse/课程信息结构体 int num1;/课程编号 char name120;/课程名称 char xinzhi30;/课程性质 i int ztime;/课程总学时 int stime;/授课学时 int shiyan;/实验学时 int score;/学分 long int date;/开学学期 int nelepeo;/课程已选人数 int Melepeo;/课程人数上限 struct couse * next; ; struct student/学生信息结构体 int num2; char name220; int nelenum50;/已选课程编号 int nelen;/已选课程数量 struct student * next; ; void Ms() for(kk1=0;kk11100;kk1+) for(kk2=0;kk2name1, 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%s%d%d%d%d%d, p1-nelepeo=0; p2-next=NULL; void filec()/录入键盘子函数(从文件录入) FILE * fp; char filepath20; 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%s%d%d%d%d%d, printf(课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 开课学期 人 fprintf(stdout,%dt %st%st%dt%dt%dt%dt%dt%dn,p1-num1,p1-name1,p1-xi 数上限n); 14 nzhi,p1-ztime,p1-stime,p1-shiyan,p1-score,p1-date,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%s%d%d%d%d%d, fprintf(stdout,%d %s %s %d %d %d %d %d %dn,p1-num1,p1-name1,p1-xinzhi,p1-z time,p1-stime,p1-shiyan,p1-score,p1-date,p1-Melepeo); p2-next=NULL; void inputc()/录入课程主函数 int i; printf(ttt录入课程信息n); printf(n1.从键盘录入n); printf(2.从文件录入n); printf(3.返回主菜单n); printf(请选择(13):n); scanf(%d, 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; 15 p0-next=NULL; else while(p0-num1 p1-num1) p1=p1-next; if(p0-num1 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=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); 16 end:; void managementc()/课程管理主函数 struct couse * incouse; int i,num1; printf(ttt课程管理n); printf(1.新增课程n); printf(2.删除课程n); printf(3.返回主菜单n); printf(请选择(13):n); scanf(%d, switch(i) case(1): incouse=(struct couse *)malloc(sizeof(struct couse); printf(课程编号 课程名称 课程性质 总学时 授课学时 实验学时 学分 开课 学期 人数上限n); scanf(%dn%sn%sn%dn%dn%dn%dn%dn%dn, incouse-nelepeo=0; insertc(incouse); break; case(2): printf(请输入要删除课程的编号:n); scanf(%d, delc(num1); break; case(3):break; void keyboards()/录入学生信息子函数(从键盘录入) int i; struct student *p1,*p2; N2=0; 17 p1=p2=(struct student *)malloc(sizeof(struct student); printf(学生学号t 学生姓名n); scanf(%d%s, p1-nelen=0; for(i=0;inelenumi=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-nelen=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(输入要读入的文件路径:); 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; 18 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(n1.从键盘录入n); printf(2.从文件录入n); printf(3.返回主菜单n); printf(请选择(13):n); scanf(%d, 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=p1-next; if(p0-num2 num2) if(head2=p1) head2=p0; 19 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=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(ttt学生信息管理n); printf(1.新增学生信息n); printf(2.删除学生信息n); 20 printf(3.返回主菜单n); printf(请选择(13):n); scanf(%d, switch(i) case(1): incouse=(struct student *)malloc(sizeof(struct student); incouse-nelen=0; incouse-nelenum0=0; printf(学生学号t 学生姓名n); scanf(%d%s, inserts(incouse); break; case(2): printf(请输入要删除学生的学号:n); scanf(%d, dels(num2); break; case(3):break; void elect(struct student * s)/选课 struct couse * p; int num1,i; printf(请输入要选课的编号:n); scanf(%d, for(i=0;s-nelenumi!=0;i+); s-nelenumi=num1; (s-nelen)+; p=head1; while(p-num1!=num1) p=p-next; (p-nelepeo)+; void cheak()/学生选课子函数(查询可选课程) char e; struct couse * c; 21 struct student * s; int num2,i,j=0,t=0; printf(请输入你的学号:); scanf(%d, s=head2; while(s-num2!=num2 if(s-num2!=num2) printf(不存在你的信息,请进入主菜单录入你的信息!n); goto end; c=head1; printf(你的可选课程编号:n); while(c!=NULL) for(t=0,i=0;s-nelenumi!=0;i+) if(c-num1=s-nelenumi) t=1; if(t=0 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(); 22 end:; void back(struct student * p)/退课 struct couse * p1; int num1,i,j; printf(请输入你要退掉的课程编号:n); scanf(%d, p1=head1; while(p1-num1!=num1) p1=p1-next; for(i=0;p-nelenumi!=num1;i+); for(j=i;p-nelenumj!=0;j+) p-nelenumj=p-nelenumj+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, p=head2; while(p-num2!=num2 if(p=NULL) printf(不存在你的信息,请回主菜单录入信息:n); goto end; printf(已选课程编号:n); if(p-nelenum0=0) printf(你还没选课!n); goto end; for(i=0;p-nelenumi!=0;i+) printf(%dn,p-nelenumi); p0=head1; while(p0-num1!=p-nelenumi) p0=p0-next; 23 f=f+p0-score; printf(总学分:%dn,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(ttt学生选课n); printf(1.查询可选课程n); printf(2.查询已选课程n); printf(3.返回主菜单n); printf(请输入(13):n); scanf(%d, 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(%d %s %s %d %d %d %d %d %d %dn,p-num1,p-name1,p-xinzhi,p-ztime,p-stime 24 ,p-shiyan,p-score,p-date,p-nelepeo,p-Melepeo); p=p-next; void lists()/输出学生信息 struct student * p; p=head2; printf(学生学号学生姓名已选课程数量n); while(p!=NULL) printf(%-4d %10s %6dn,p-num2,p-name2,p-nelen); p=p-next; void intoc()/存储课程信息 FILE * fp; struct couse * p; char filepath30; printf(输入课程信息要保存的文件路径:); getchar(); gets(filepath); if(fp=fopen(filepath,w)=NULL) printf(n 保存失败!); exit(0); p=head1; while(p!=NULL) fprintf(fp,%d %s %s %d %d %d %d %d %d %dn,p-num1,p-name1,p-xinzhi,p-ztime,p-st ime,p-shiyan,p-score,p-date,p-nelepeo,p-Melepeo); p=p-next; fclose(fp); printf(课程信息已保存在%s 中!n,filepath); void intos()/存储学生信息 FILE * fp; 25 struct student * p; char filepath30; 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(学生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论