C语言课程设计课程管理系统实验报告(共43页).doc
![资源得分’ 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)
《C语言课程设计课程管理系统实验报告(共43页).doc》由会员分享,可在线阅读,更多相关《C语言课程设计课程管理系统实验报告(共43页).doc(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 课程设计实验报告课程管理系统计算机科学与工程学院班董永博 陈佳兴 田晨光 赵炳舒 欧 静 目录题目-3分析过程与思路-3算法-5函数模块介绍-9源程序-10运行结果-36课程设计总结-42一 题目课程管理系统二 分析过程与思路课程管理系统首先要能够分别实现课程信息的增加、删除、查询、修改。为了增加程序的实用性,应当能够将输入的课程信息通过存文件的方式将课程信息存入硬盘。而使用系统的可能是学生和管理员两类,因此要实现根据登录类型来开放应有的功能。由于课程信息包含很多成员,例如课程编码、课程名等。因此应该用链表对信息进行记录,由于不清楚课程总数,因此需要用动态链表。动态
2、链表的使用需要声明合适的结构体,数据域中应包含课程所包含的各个成员、指针域用来指向下一个结点。动态链表的建立需要用到malloc函数。对已经建立的链表需要存入文件,需要用到fwrite、fread、feof等文件处理函数,保存文件要多次用到,因此应该独立做一个函数。删除函数要用到诸如free函数,为了防止删除的结点为首结点,删除后找不到头结点,因此删除函数应该是一个指针函数,用以返回删除后的新的头结点。登录函数要返回一个值用以在其他函数中判断登录类型,以便针对用户开放相应的功能。课程管理系统登录key学生登录mainpage()管理员登陆mainpage()查询serch()查询serch()
3、输入inpt()添加add()删除dele()修改alter()程序功能结构示意图三 算法NY21开始输入登录类型oO=?学生登录管理员登录mainpage()key函数简单算法字符串相等1输入mm=?serch()退出inpt()结束O=?mainpage函数算法简单示意Save函数21!17&!2开辟新节点输入新节点数据输入zz=?inpt函数算法简单示意开辟新节点结点相连YNYNYNYserch函数查看方式n=0?打开文件文件为空开辟结点读取文件数据已读完文件为空Mainpage函数输出一个结点完毕?查询方式结点遍历查找输出重新?操作?添加add修改alter删除deleSerch函数算
4、法简单示意NY输入数据满足条件异常处理示意p1-前一结点p2-当前结点p1-next=p2删除首结点head=p1-nextfree(p2)return(head)free(p1)删除函数简单示意四 函数模块介绍void inpt();/输入函数:用以输入一系列数据,在文件中没有课程信息数据或者需要全部更新时使用该函数模块。void serch();/查询函数,用以查询已经存储的课程信息。并通过调用其他函数,来对课程信息进行一系列操作。void alter(int all,int b,lesson *head);/修改函数,用以小规模的修改已经存储的课程信息。lesson *dele(int
5、all,int b,lesson *head);/删除函数,用以删除一些已经失效了的课程信息。通过返回新链表的头指针,以便对新链表进行一系列操作。void save(int n,lesson *p);/保存函数,用以将已经建立的链表存入硬盘,便于随时使用。void output(struct lesson *q2);/输出函数,用以将课程信息输出到屏幕上显示出来。void add(int all,lesson *head);/添加,用以在原课程信息的基础上添加新的课程信息。void mainpage();/主界面函数int key();/登录函数,通过返回值来判断用户类型,以开放不同的功能。五
6、 源程序#include#include#include#define len sizeof(struct lesson)#define print printf(输入数据有误,请重新输入!n);int n,temp,o;struct lessonchar num5;/课程编码char proj10;/课程名char crdt4;/学分char hour3;/学时char term2;/学期char week5;/周次char date5;/周日期(周几)char period5;/节次char room6;/教室struct lesson *next;/结构体指针;void inpt();/
7、输入函数void serch();/查询函数void alter(int all,int b,lesson *head);/修改函数lesson *dele(int all,int b,lesson *head);/删除函数void save(int n,lesson *p);/保存函数void output(struct lesson *q2);/输出函数void add(int all,lesson *head);/添加void mainpage();/主界面函数int key();/登录函数int main()/ 田晨光o=key();/调用登录函数mainpage();/调用主界面 r
8、eturn 0;void mainpage()/主界面函数 董永博int m=1;while(m=1)printf(*n);/ printf(* 输入1增加课程 *n); printf(* 输入2查询课程 *n); printf(* 输入3退出程序 *n); printf(*nn);doscanf(%d,&m);if(m3) print;/该循环体使用户输入选项代码并判断代码是否合理while(m3); system(CLS);/清除屏幕内容 switch(m)/通过switch语句转向用户选择的功能函数 case 1:inpt();break;/调用输入函数 case 2:serch();b
9、reak;/调用查询函数 case 3:exit(0);break;/退出void inpt()/输入函数 田晨光if(o=1)system(CLS);/清屏printf(没有权限,请联系管理员!n);mainpage();int k=1,z,x,i;struct lesson *head;/声明一个lesson类型的结构体指针,作为头指针。struct lesson *p1,*p2;/声明两个lesson类型的结构体指针,建造链表。p1=p2=(struct lesson *)malloc(len);/使两个结构体指针都指向第一个节点n=0;/n用来从零开始记录当前为第几节点 while(k
10、=1)/循环输入n=n+1;/循环体每执行一次使n加1printf(请输入课程编码(1-4位字符串 例:001)n);/输入数据doscanf(%s,&p1-num);if(strlen(p1-num)4) print;while(strlen(p1-num)4);printf(请输入课程名(1-10位字符串 例:math)n);doscanf(%s,&p1-proj);if(strlen(p1-proj)10) print; while(strlen(p1-proj)10);printf(请输入学分(两位实数,整数部分1位,小数部分1位,例:1.5)n);dox=0;scanf(%s,&p1
11、-crdt);if(strlen(p1-crdt)4) print;elsefor(i=0;icrdt)i57|(p1-crdt)icrdt)4|x=1);printf(请输入学时(两位整数 例:32)n);dox=0;scanf(%s,&p1-hour);if(strlen(p1-hour)3) print;elsefor(i=0;ihour)i57|(p1-hour)ihour)3|x=1);printf(请输入学期(以为整数 例:2)n);dox=0;scanf(%s,&p1-term);if(strlen(p1-term)2) print;elsefor(i=0;iterm)i57|(
12、p1-term)iterm)2|x=1);printf(请输入周次(例1-17)n);doscanf(%s,&p1-week);if(strlen(p1-week)5) print; while(strlen(p1-week)5); printf(请输入日期(三位周日期 例:mon、sat)n);doscanf(%s,&p1-date);if(strlen(p1-date)3) print; while(strlen(p1-date)3); printf(请输入节次(例:5-6)n);doscanf(%s,&p1-period);if(strlen(p1-period)5) print; wh
13、ile(strlen(p1-period)5);printf(请输入教室(例:2-201)n);doscanf(%s,&p1-room);if(strlen(p1-room)6) print; while(strlen(p1-room)6);if(n=1) head=p1;/如果n=1,(即当前为第一个节点),就使head指向头结点,作为头指针。system(CLS);/输入完毕,清屏printf(*n);/输出提示信息printf(* 输入1继续添加 *n); printf(* 输入2保存并退出 *n); printf(*n);doscanf(%d,&z);if(z2) print;/该循环
14、体使用户输入选项代码并判断代码是否合理while(z2); if(z=1)/如果用户选择继续添加,进入该分支p1=(struct lesson *)malloc(len);/利用malloc函数,开辟一个新节点 (p2-next)=p1;/令前一个结构体的next指针指向后一个节点,将两个结构体链接起来p2=p1;/令另一个指针也指向下一个节点,便于下次使用else/如果用户选择保存并退出选项,进入该分支。 (p2-next)=NULL;/令最后一个节点的next指针指向NULL; break;/跳出循环n=0-1;save(n,head);/调用save函数,将已经建立的链表存入文件main
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 课程 管理 系统 实验 报告 43
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内