C语言课程设计—学生选课系统_第1页
C语言课程设计—学生选课系统_第2页
C语言课程设计—学生选课系统_第3页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言课程设计一学生选课系统武汉理工大学华夏学院课程设计报告书课程名称:C 课程设计题 目 : 学生选课系统程序设计 系 名: 信息工程系 专业班级:姓 名:学 号:指导教师 :成 绩:2016 年 3 月 4 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:设计题目 :学生选课系统程序设计初始条件:学生选课系统能提供学生选课, 以及学生和 课程信息管理等一系列功能。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、任务描述假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,学时, 授课学时,实验或上机学时,学分,开课学期等信息,学生可按要

2、求(如总 学分不得少于 15)自由选课。试设计一个选修课程系统,使之能提供以下 功能:(1)系统以菜单方式工作(2)课程信息和学生选课信息录入功能(课程信息用文件保存)(3)课程信息浏览功能(4)查询功能(5)按学分查询(6)某门课程学生选修情况(可选项)2、本课程涉及的知识点变量的定义、 输入和输出函数、 结构体类型 的定义、结构体数组、循环语句、选择语句,文 件的操作等。设计报告撰写格式要求: 一、课程设计说明书(或报告书)正文内容设计题目】例如:学生选课系统【开发环境】硬件环境:微机系列,内存在 1G 以上,软件环境: Microsoft Windows XP 【开发工具】 Micros

3、oft Visual C+ 6.0 【完成时间】 【需求分析】分析阐述用户的需要以及要实现的 程序应具有什么样的功能。【系统总体设计】在明确了所要解决的问题后, 很自然地就要 提出自己解决问题的思路和方案。 让读者了解方 案的总体设计和关键技术。要阐述自己的设计方案,说明为什么要选择 或设计这样的方案。具体包括: 系统总的设计思路, 功能模块图; 使用的设计软硬件环境和开发技术和平台 等。【系统详细设计】 在这部分中,应该具有相关关键实现技术(如使用什么库函数,使用什么循环结构等) 。 【系统调试和测试】 调试:介绍设计过程中遇到的问题和解决方法。 测试:介绍如何测试系统, 测试中发现的问题和

4、 解决方案。【结束语】这部分篇幅不大, 对整个设计中做的工作、 获得 的成果、心得体会等做一个简单小结。【参考文献】罗列在设计过程中查阅的文献名称 注意:参考文献罗列的格式为资料编号 ?作者姓名 ?文献或期刊名称 ?出版社 名称,文献的出版时间或期刊的期号例如:文献 1 谭浩强.,C 程序设计(第二版) M ,北京:清华大学出版社, 2001年期刊 2 于振海.office XP 网上数 据存取 .计算机应用文摘 J ,2003,24;69(页)、课程设计说明书(或报告书)正文的书写格式简介一、正文标题层次 正文题序层次是文章结构 的框架,一般采用社会通用的论文书写形式。 即章条序码统一用阿拉

5、伯数字表示,题序层 次可以分为若干级, 各级号码之间加小圆点, 末尾一级的后面不加小圆点,层次分级一般 不超过四级为宜,示例如下:第一级(章)123第二级1.12.13.1(条)1.22.2 3.2 第三级1.1.12.1.13.1.1(条)1.1.2 2.1.2 3.1.2 1.2.12.2.13.2.11.2.22.2.23.2.2二、表格 每个表格应有自己的表序与表题, 表序与表题间空一格。例如:表 1.1 XXXX ,且表题与表序应写 在表格的上方正中处。三、插图 插图图面要整齐、美观,插图应与 正文呼应,不能脱节。 每幅插图应有图序与 图题,图序编号要连续, 图序与图题间空一 格且要

6、放在插图下方居中处。四、公式 公式应另起一行写在稿纸的中央 时间安排:周 次星期星期星期星期四星期五第第 1-4第 3-4第 1-4第第 1-42 周节节节1-2 节节地现教现教现教现教现教点221221221221221课程设计考核及评分标准1. 系统完成任务: 50 分2. 各种技术的综合应用: 10 分3、回答提问情况: 20 分4. 设计报告: 20 分1 设计题目 1.2 开发环境 1.2.1硬件环境 1.2.2软件环境 1.3 开发工具 1.4 完成时间 1.5 需求分析 1.6 系统总体设计 2.7 系统详细设计 5.7.1 系统主菜单 5系统主菜单界面 错 误!未定 义书 签。

7、系统功能模块图 错 误!未定 义书 签。系统主菜单流程图 错误!未定义书 签。系统主菜单代码 错 误!未定 义书 签。7.2 录入课程信息 1 17.2.1 录入课程信息界面 错误!未定义书 签。7.2.2 录入课程信息模块图 错误!未定义 书签。7.2.3 录入课程信息流程图 错误!未定义 书签。7.2.4 录入课程信息代码 错误!未定义书 签。7.3课程管理 1. 57.3.1 课程管理界面 错误!未定义书签。课程管理模块图 错 误 ! 未 定 义书 签。课程管理流程图 错 误 ! 未 定 义书 签。7.3.4 课程管理代码 错误!未定义书签。7.4 学生信息管理 2 07.4.1 学生信

8、息管理界面 错误!未定义书 签。学生信息管理界面模块图 错误 !未 定义书签。学生信息管理流程图 错误 !未定义 书签。7.5 学生选课7.4.4 学生信息管理代码 错误!未定义书 签。2. 77.5.1 学生选课界面 错误!未定义书签。 学生选课模块图 错 误!未定 义书 签。学生选课流程图 错 误!未定 义书 签。7.5.4 学生选课代码 错误!未定义书签。8 系统调试和测试 3. 88.1 调试3. 88.2 测试4. 1.4. 34. 49 结束语 10 参考文献1 设计题目学生选课系统2 开发环境2.1 硬件环境微机系列,内存在 1G 以上2.2 软件环境Win7 系统3 开发工具M

9、icrosoft Visual C+ 6.04 完成时间2016年 2月 29日 2016年3月 4日5 需求分析用户需求如下:假定有 n 门课程,每门课程有课程编号, 课 程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于 15)自由选课。试设计一 个选修课程系统。故此,经过分析后我觉得程序应该具有以下 功能:(1)系统以菜单方式工作(2)课程信息和学生选课信息录入功能(3)课程信息浏览功能(4)查询功能(5)按学分查询6 系统总体设计系统由哪几个功能模块构成, 给出功能模块 图。C 中模块化的工具是函数根据上面的需求分 析,可以将这个系统

10、的设计分为如下六大模块。选课模块、按学分查找模块、按编号查找模块、 查看课程模块、 查看选课情况模块、 课程输入模 块、完成选择模块。模块图如下图 1 所示。菜单选录入课 程信息录学生学退入信息生出完成选图 1 系统功能模块图 另外,程序用了两个结构体和五个全局变量 N1,N2,kk1,kk2,kk3 。五个全局变量是用来控制 输入数据的循环的。 两个结构体分别是课程信息 结构体:struct couse/ 课程信息结构体 int num1;/ 课程编号char name120;/ 课程名称 char xinzhi30;/ 课程性质 int ztime;/ 课程总学时 int stime;/

11、授课学时 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;kk1<1100;kk1+)for(kk2=0;kk2<

12、1200;kk2+)for(kk3=0;kk3<1200;kk3+);7 系统详细设计7.1 系统主菜单系统界面设计图包括六个选项, 用户可根据 自己的需求选择不同的选项。 系统界面设计图如图 2 所示图 2 系统界面设计图 系统模块图分为六大模块。 分别是录入课程 信息模块, 课程信息管理模块, 录入学生信息模块,学生信息管理模块, 学生选课模块和退出系 统模块。系统功能模块图如下图 3 所示图3录入课程信课程信息管系录统入功学能生模信块图菜学生信息管单学生选课退出系统图3 主菜单设计模块图当用户进入主菜单后, 会显示有六个选项的 界面,需要用户从 1-6 个选项中选择一个选项来 进行

13、操作,若所选数非 1-6,则会退出系统。系 统主菜单流程图如图 4 所示。图 4 系统总流程图该程序实现代码如下。int main()/ 主函数int i;start:printf("nttt 欢迎使用学生选课系统 !n"); printf("n");printf("t 主菜单 :n");printf("t* * n");printf("t*n");printf("t*1.录入课程信息*n");printf("t*2.课程信息管理*n");printf(&

14、quot;t*3.录入学生信息*n");printf("t*4.学生信息管理*n");printf("t*5.学生选课*n");printf("t*6.退出系统*n");printf("t* *n");printf("t * n");printf("n 请输入菜单选项 (16):"); scanf("%d",&i);if(i<1 | i>6)printf(" 输入错误 ,请重输 :n");goto star

15、t;switch(i)case 1:system("cls");inputc();goto start;break;case 2:system("cls"); managementc(); goto start; break;case 3:system("cls"); inputs(); goto start; break;case 4:system("cls"); managements(); goto start; break;case 5:system("cls");elective();

16、goto start;break;case 6:system("cls");printf(" 感谢使用本系统 !nn 再见!n");return 0;7.2 录入课程信息录入课程信息有两个选项, 录入课程和返回主菜单。录入课程信息界面设计如图 5 所示。图 5 录入课程信息界当用户进入录入课程后, 会有两个选项, 录入课程和返回主菜单。 录入课程信息流程图如图6 所示。开始结束图 6 录入课程信息流程图实现该功能代码如下。void keyboardc()/ 录入课程子函数struct couse *p1,*p2;N1=0;p1=p2=(struct co

17、use*)malloc(sizeof(struct couse);printf(" 课程编号 课程名称 课程性质 总学 时 授课学时 实验学时 学分 开课学期 人数上 限n");scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1- >Melepeo);p1-&g

18、t;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->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,

19、&p1->date,&p1->Melepeo);p1->nelepeo=0;p2->next=NULL;void inputc()/ 录入课程主函数int i;printf("ttt 录入课程信息 n"); printf("n1. 录入课程 n"); printf("2. 返回主菜单 n"); printf(" 请选择 (12):n"); scanf("%d",&i);switch(i) case(1):keyboardc();break; cas

20、e(2):break;7.3 课程管理课程管理有三个选项, 新增课程, 删除课程 和返回主菜单。课程管理界面设计如图 7 所示图7 课程管理界面课程管理可以选择增添或删除课程, 若输入 课程格式错误会显示错误, 用户需要重新输入程 管理流程图如图 8 所示。Y保结束图 8 课程管理流程图实现该功能代码如下。void delc(int num1)/ 课程管理子函数 (删除课程 ) struct couse *p1,*p2; if(head1=NULL)printf("n 没有课程 ,无法删除 !n"); goto end;p1=head1;&&while(nu

21、m1!=p1->num1 p1->next!=NULL)p2=p1; 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");end:;void managementc()/ 课程管理主函数struct couse * incouse;int i,num1;printf("ttt

22、课程信息管理 n");printf("1. 新增课程 n");printf("2. 删除课程 n");printf("3. 返回主菜单 n");printf(" 请选择 (13):n"); scanf("%d",&i);switch(i)case(1):incouse=(struct cous *)malloc(sizeof(struct couse);printf(" 课程编号 课程名称 课程 性质 总学时 授课学时 实验学时 学分 开课学 期 人数上限 n&quo

23、t;);scanf("%dn%sn%sn%dn%dn%dn%dn% dn%dn",&incouse->num1,&incouse->name1, &incouse->xinzhi,&incouse->ztime,&incouse->s time,&incouse->score,&incouse->date,&incouse ->Melepeo); incouse->nelepeo=0; insertc(incouse); break;case(2):prin

24、tf(" 请输入 要删除课程的编 号:n");scanf("%d",&num1);delc(num1); break;case(3):break;7.4 学生信息管理学生信息管理可选新增或删除学生信息, 若 都不操作则可选返回主菜单。 学生信息管理界面 设计如图 9 所示。图 9 学生信息管理界面 学生信息管理有增加和删除学生信息, 若选 择此项, 则会提示用户输出入相关信息, 若输入 格式错误则会有提示错误信息, 当操作完成后会 退回主菜单界面。 学生信息管理界面流程图如图 10 所示。开始新增学生信息输入姓名输入错 保存信退出结束图 10 学

25、生信息管理界面流程图 实现该功能代码如下。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->next!=NULL)p2=p1; p1=p1->next;if(p0->num2 <= p1->num2) if(head2=

26、p1) head2=p0; else p2->next=p0; p0->next=p1;elsep1->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->next!=NULL)p2=p1;p1=p1->nex

27、t;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");p

28、rintf("2. 删除学生信息 n"); printf("3. 返回主菜单 n"); printf(" 请选择 (13):n"); scanf("%d",&i);switch(i)case(1):incouse=(struct student*)malloc(sizeof(struct student);incouse->nelen=0; incouse->nelenum0=0; printf(" 学生学号 t 学生姓名 n");scanf("%d%s"

29、,&incouse->num2,incouse->nam e2);inserts(incouse);break;case(2):printf(" 请输入 要删除学生的学 号:n");scanf("%d",&num2);dels(num2);break;case(3):break;7.5 学生选课学生选课可以查询已选和可选课程, 此外还 有返回主菜单选项学生选课界面设计如图 11 所 示。图 11 学生选课界面进入选课选项则会提示用户输入学号然后 再进行选课。 若不选则可以退回主菜单。 学生选课流程图如图 12 所示学生选课输入

30、n输入nNY结束图 12 学生选课流程图 实现该功能代码如下。选课程序如下。 用户要选课时, 查询可选课 程后会提示输入所要选的课程的编号, 然后程序 会根据所选的课程编号将所选课程信息储存。 void elect(struct student * s)/ 选课 struct couse * p; int num1,i;printf(" 请输入要选课的编号 :n"); scanf("%d",&num1); for(i=0;s->nelenumi!=0;i+); s->nelenumi=num1;(s->nelen)+;p=hea

31、d1;while(p->num1!=num1) p=p->next;(p->nelepeo)+;void cheak()/ 学生选课子函数 (查询可选课程 )char e;struct couse * c;struct student * s;int num2,i,j=0,t=0;printf(" 请输入你的学号 :");scanf("%d",&num2);s=head2;while(s->num2!=num2 && s->next!=NULL) s=s->next;if(s->num2!

32、=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 && (c->nelepeo!=c->Melepeo)printf("%dn",c->num1);j+;c=c->next;if(j=0)printf(&q

33、uot; 你已选完所有课程,无法再多 选!n");goto end;printf(" 选课 (y/n)?:n");getchar();e=getchar();i=0;while(e='y')elect(s);printf(" 继续选课 (y/n)?:n");getchar(); e=getchar();end:;退课程序如下。首先输入要退掉课程的编 号,若该课程存在,则显示退课成功, 若不存在, 则失败。void back(struct student * p)/ 退课struct couse * p1;int num1,i,j

34、;printf(" 请输入你要退掉的课程编号 :n"); scanf("%d",&num1);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"); 查询已选课程代码如下。 首先输入学

35、号, 若 系统中无记录, 则会提示不存在该信息, 请用户 录入该信息,然后用 goto 语句跳转到主菜单界 面。若有记录,则继续输入课程编号,若未选此 课,则会提示你还没有选这个课程。 void hcheak()/ 学生选课子函数(查询已选课程 ) char c; struct couse * p0;struct student * p;int num2,i,f=0;printf(" 请输入学号 :n"); scanf("%d",&num2);p=head2;while(p->num2!=num2 && p!=NULL) p

36、=p->next;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;f=f+p0-

37、>score;printf(" 总学分 :%dn",f);printf(" 是否进行退课 (y/n)?");getchar();c=getchar();while(c='y')back(p);printf(" 继续退课 (y/n)?");getchar();c=getchar();(p->nelen)-;end:;选课主界面程序如下。用 printf 输出界面, 用 switch 语句选择调用对应的函数以实现选择 各种情况。void elective()/ 学生选课主函数int i;printf("

38、;ttt 学生选课 n");printf("1. 查询可选课程 n");printf("2. 查询已选课程 n");printf("3. 返回主菜单 n");printf(" 请输入 (13):n"); scanf("%d",&i);switch(i)case(1):cheak();break; case(2):hcheak();break; case(3):break;8 系统调试和测试8.1 调试在调试程序的过程中, 一方面遇到了一些编 程序时的通病,比如经常性的漏掉了语句尾的分 号,还偶尔的漏掉大括号, 导致程序不能正常编 译。另一方面在编写函数模块时, 由于之前设计 考虑得不足, 会有一些功能无

温馨提示

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

评论

0/150

提交评论