物联网1612瞿寅学生选修课程系统设计报告.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《物联网1612瞿寅学生选修课程系统设计报告.docx》由会员分享,可在线阅读,更多相关《物联网1612瞿寅学生选修课程系统设计报告.docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、高级语言程序设计课程设计报告课题名称: 学生选修课程设计 姓 名: 瞿 寅 班 级: 物联网1612 学 号: 161003320237 指导教师: 计春雷 电子信息学院2017年 6 月 29 日目 录1 课题分析11.1 问题描述11.2 功能需求分析12 系统设计22.1 系统功能模块22.2 数据结构设计22.3 菜单设计22.4 函数设计与说明32.5 文件清单与说明33 系统实现43.1密码登陆操作43.2 创建链表53.3 浏览所有链表信息63.4 按条件查找课程73.5 选课93.6浏览所有课程信息103.7已选课程信息123.8 录入课程123.9 主菜单134 测试数据与测
2、试过程记录154.1 菜单测试154.2 系统功能测试155 课程设计遇到的问题与解决方法226 课程设计总结23参考文献24附件:程序251 课题分析1.1 问题描述当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息系统的环境。使用计算机不仅提高了工作效率,而且大大提高其安全性,计算机进行信息管理与信息系统的开发密切相关。为了管理好学生选课信息,建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够与时、准确、有效地查询和修改选课情况,并为学生更好地了解自己的学习进度提供方便,提高学生
3、的选课效率。1.2 功能需求分析假定有n门课程,每门课程有课程编号,课程名称,课程性质(考试、考查),总学时,学分,限选人数,剩余人数等信息,学生可按要求(如总学分不得少于60)自由选课。实现以下功能:1)系统以菜单方式工作;2)课程信息和学生信息录入功能(课程信息用文件保存);3)课程信息浏览功能;4)按课程性质查询查询功能:(至少两种查询方式,按学分查询、按课程性质查询)5)显示学生选课情况2 系统设计2.1 系统功能模块按系统所需实现的功能要求,功能模块如图2-1所示。完成选择模块退出系统信息查看及储存学生选课查找课程信息录入课程信息菜单选择模块返回主菜单图2-1 系统功能模块图2.2
4、数据结构设计系统处理的数据主要是所选修课程的序号,名称,学分,性质,学时,和剩余容量,用c语言的结构体表示如下:typedef struct subjectsint Num; /课程序号 char Name20; /课程名称 float Score; /课程学分char Type10; /课程性质 int Time; /课程学时int Remain; /课程剩余容量 struct subjects *next; sub;2.3 菜单设计根据系统的功能要求,主菜单的主要设计如下:printf(*学生选课系统*n); printf( 主菜单n); printf( 请选择功能项(16)n); pri
5、ntf(n 1.录入课程信息(管理员模块)n); printf( 2.按条件查找课程n);printf( 3.开始选课n);printf( 4.查看已选课程情况n); printf( 5.退出系统n);2.4 函数设计与说明学生选修课程系统采用结构化程序设计思想,程序中除主函数外,设计了如下函数,函数的原型与功能说明如表2-1所示。表2-1函数列表序号函 数 原 型功 能 说 明1void menu()主菜单2void remenu()返回菜单3void *insert()插入、添加课程信息4void saveFile()将课程信息存到文件中5void showAll()显示所有课程信息6vo
6、id search()按条件查找课程7void select()学生选课8void selected()已选课程信息9void showForm()显示链表内容10void enter()录入课程2.5 文件清单与说明数据读写操作的实现主要以文件方式进行,该程序主要涉与以下文件:文件1:“所有课程.txt” /全部课程信息存放的文件文件2:“已选课程.txt” /已选课程的详细信息文件3:“登陆密码.txt” /默认管理员密码存放文件4:“myhead.h” /放一些全局变量和函数声明3 系统实现 3.1密码登陆操作此处的登录操作是一个返回int类型值的函数,以文件的读取方式进行密码核对,并根
7、据返回值在接下来需要进入的功能函数中进行判断:如果输入的密码输入正确,则返回1,便可进入下一个功能模块;否则,返回0。流程图如图3-1所示。Y核对密码主菜单下一功能输入密码图3-1 密码登陆流程图代码:int Login()FILE *fp;char s10,code10;fp=fopen(登陆密码.txt,r);while(!feof(fp)fscanf(fp,%s,code);printf(请输入管理员密码:);scanf(%s,s);if(!strcmp(s,code)printf(登陆成功!);/system(pause); return 1;elseprintf(n密码错误!n);
8、return 0;/密码登录操作3.2 创建链表创建链表的实现是靠一个返回值类型为结构体指针的函数,并传入一个int类型的参数,该参数主要用于根据用户层面的需要从而相对应的输入多少链表信息,再循环中以该参数为限定条件然后输入相应信息。整个过程中具体先要向系统申请sizeof(sub)的内存空间,开始输入前还应注意清空输入缓存区,输入完成后,然后判断该结点是否是第一个结点,如果是则将其赋给头结点(head)head=p;q=p;;如果不是则将其赋给链表尾部(q-next),然后就可以移动尾指针(即将该结点赋给q):q-next=p;q=p;。最后一定要返回该链表的头指针。流程图如图3-2 所示。
9、创建链表完成结构体第一个结点设为头结点赋给尾部结点移动尾指针返回链表的头指针图3-2 创建链表流程图代码:sub *form_create(int n) sub *head,*p,*q; int size=sizeof(sub),i; head=NULL;/暂时不用的指针先赋空值 for(i=0;iNum); /p-Num=num; printf(n课程名称:n); scanf(%s,p-Name); /strcpy(p-Name,name); printf(n课程性质:n); scanf(%s,p-Type); /strcpy(p-Type,type); printf(n课程学分:n); s
10、canf(%f,&p-Score); /p-Score=score; printf(n课程学时:n); scanf(%d,&p-Time); /p-Time=time; printf(n课程余量:n); scanf(%d,&p-Remain); /p-Remain=remain; p-next=NULL; if(i=0) head=p; /*如果是第一个结点,构造的结点赋给头结点;*/ else q-next=p; /* 否则,插入结点到链表尾部,并移动链表的尾指针*/ q=p; return head; /*最后返回链表的头指针*/ /创建链表 (从带头结点的尾部循环插入新结点)3.3 浏览
11、所有链表信息为确保链表保存的信息准确无误,在创建好链表之后可以将链表的信息打印出来核对:代码:void showForm() sub *p; printf(课程序号 课程名称 课程性质 课程学分 课程学时 课程余量n); p=(sub*)malloc(sizeof(sub); for(p=head; p ;p=p-next) printf(%5d%12s%12s%9.2f%9d%9dn,p-Num,p-Name,p-Type,p-Score,p-Time,p-Remain); /浏览所有链表信息3.4 按条件查找课程查询模块提供两个查询方法:按课程性质查找和按学分查找,switch语句中, c
12、ase 1按课程性质查找相应课程;case 2是按课程学分查找对应课程;case 3则是返回主菜单操作。在查找过程中,以链表形式进行,结构体指针不为空时,循环一直进行,用if语句判断,寻找相匹配的信息最后输出;若未查找到相应信息,则显示else语句中的“未找到!”。流程图如图3-3所示。查找课程按性质按学分退出查找 图3-3 查找课程流程图代码:void search() int a,b,c; char t10; sub *p; system(cls); printf(请选择查询方式(13)n); printf(1.按课程性质查找n); printf(2.按课程学分查找n); printf(3
13、.退出查找n); scanf(%d,&a); switch(a) case 1:printf(请输入课程的性质(如:专业基础课):n); printf(返回则输入0 n); scanf(%s,t); if(t0=0) search();else printf(课程序号 课程名称 课程性质 课程学分 课程学时 课程余量n); for(p=head; p ;p=p-next) if(strcmp(t,p-Type)=0) printf(%5d%12s%12s%9.2f%9d%9dn,p-Num,p-Name,p-Type,p-Score,p-Time,p-Remain); c=0; if(c) p
14、rintf(n未找到!请重新查找。n); c=1; system(pause); search(); break; case 2:printf(请输入所需课程的学分:n); scanf(%d,&b); printf(课程序号 课程名称 课程性质 课程学分 课程学时 课程余量n); for(p=head; p ;p=p-next) if(p-Score=b) printf(%5d%12s%12s%9.2f%9d%9dn,p-Num,p-Name,p-Type,p-Score,p-Time,p-Remain); c=0; if(c) printf(n未找到!请重新查找。n); c=1; syste
15、m(pause); search(); break; case 3:remenu(); break; /按条件查找课程3.5 选课该模块主要是根据课程的序号选修相应课程,但在这里设置了学分要求(必须满60分),因此会有如下,判断:如果所选的全部课程学分总和大于等于60分则,选课成功,并将所选修的课程信息存入文件“已选课程.txt”中。否则,选课失败,并显示当前选修了多少学分课程,此时需要重新选课。里面的主要实现还是根据链表形式:首先从链表结构体的头指针开始,如果该指针未到空,则一直指向下一个结构体,直到遍历所有链表信息,然后结束循环,此间便可以进行学分的累加,课程序号的判断,以与最终课程信息的
16、存储。流程图如图3-4所示。开始选课输入课程序号总学分达到60选课成功选课失败图3-4 选课流程图代码: void select() sub *p,*q; FILE *fp; int x5,m,n=0,i; int total=0; printf(n请输入要选修课程的序号(序号之间以空格分开):n); scanf(%d,&m); printf(n完成选课请输入数字0即可提交!n); while(m!=0) for(p=head; p ;p=p-next) if(p-Num=m) total+=p-Score; xn=m; n+;scanf(%d,&m); if(total60) printf(
17、n选修课程失败,当前已选课程学分%d,未达到60分。n,total); system(pause); else fp=fopen(已选课程.txt,w); for(i=0;inext) if(q-Num=xi) fprintf(fp,%5d%12s%12s%9.2f%9d%9d,q-Num,q-Name,q-Type,q-Score,q-Time,q-Remain-1); fclose(fp); printf(n选修课程成功!n); printf(你总共选修了 %d 学分的课程n,total); printf(n详细课程信息已存入文件 * “已选课程.txt ”*n); system(paus
18、e); remenu(); /选课3.6浏览所有课程信息该模块主要是将之前录入的课程信息从文件“所有课程.txt”中读出并显示在屏幕上,比如在选课模块前就需调用此函数,才好进行选课操作。主要实现方法是用文件中feof()函数,将其加入while循环中(while(!feof(fp)),如果没到文件结束处,则一直输出文件中的信息,即将课程信息以链表形式输出。知道文件结束,feof()才返回非零值,此时循环将结束,注意需要关闭文件(fclose(fp)。流程图如图3-5所示。浏览课程信息打开文件文件存在打开失败输出课程信息主菜单图3-5 浏览课程信息流程图代码:void showAll() sub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 联网 1612 学生 选修 课程 系统 设计 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内