版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子科技大学成都学院计算机系实践类核心课程设计报告课 程 名 称:程序设计实践2设 计 题 目:学生信息管理系统指导 教师 组:周舸组长学号姓名: 何金城组员学号姓名: 唐震计算机系制2016年6月1.0项目需求分析随着学生管理的复杂度提高,单纯的文本管理已经无法满足学校教务的要求,学生管理系统开始大量的涌入高校,同时随着学生管理系统涌入我们的高校,如何更便利的对学生信息进行系统和有序的操作,成为了我们需要考虑的问题。1.1设计内容本项目运用C语言程序设计一个学生信息管理系统。系统的功能主要有:学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览,系统密码管理,系统时间查询,以
2、及在相应的硬盘上面进行存盘以防止部分数据的丢失。本系统的功能模块图如图1所示。图1.学生信息管理系统功能模块图1.2 设计要求需要有系统的功能:学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览等功能;并可以在文件中存储学生信息,使得第二次打开依旧会保存上次的操作2.1程序的功能分析Main() 主函数:调用动画函数,调用菜单函数,调用文件信息读入函数。Cartoon() 动画函数:打印进入动画,调用密码函数。Keyword() 密码函数:限制进入系统的人的权限。Menu() 菜单函数:打印系统功能,并选择执行功能,有打印提示使用者。Read() 文件读入函数:从数据文件读入
3、数据,进入链表,并返回头节点。Save() 文件写入函数:将单链表中数据,写入文件中。Push() 压栈函数:将数据压栈。Pop() 出栈函数:将数据出栈并打印。Totle() 计算总分函数:自动计算当前链表所有节点的总分。Average() 计算平均分函数:自动计算当前链表所有结点的平均分。AddNODE() 添加信息函数:在单链表最末端添加信息。Delet() 信息删除函数:找到需要删除的学生的结点,并删除该结点。InquiryNODE 信息查询函数:找到所查询的信息所在结点,并打印该结点的所有数据。modifyNODE() 修改信息函数:找到需要修改的信息的结点,让使用者输入修改后的数据
4、,输入当前链表的结点中。Browse() 浏览信息函数:对除头结点以外的所有结点进行访问,并打印数据。SortTNODE() 排序函数:依次将单链表中,各科成绩输入函数Tree()中,建立二叉排序树。Tree() 二叉排序树建立函数:依次接受一个值,进行插入排序建立二叉排序树,并调用Inview()函数。Inview() 二叉排序树的中序遍历函数:对二叉排序树进行中序遍历,调用push()及pop()函数,进行降序排序。Exit() 退出函数:调用文件写入函数,并退出程序。Time() 时间函数:调用Windows API,实现获取系统时间,并保存。2.2程序功能结构AddNODE() Del
5、et() InquiryNODE() ModifyNODE() Browse() Time() Sort() 2.3存储结构设计struct datadent/学生信息结构体char name20;/姓名char sex5;/性别int data_num;/学号int Math;/数学成绩int English;/英语成绩int C_language;/C语言成绩int telphone;/电话int totle;/总分int average;/平均分;struct NODE/链式存储结构datadent data;NODE *next;struct Password/密码结构体int Acc
6、;int Pas;pass2;/密码结构体数组struct Time/时间信息结构体int year;/年int month;/月int day;/日int hour;/时int minute;/分int second;/秒TIME;struct STACK/栈结构体int sSIZE;/数组int top;/栈底指针;struct TNODE/二叉树结构体int data;/数据域struct TNODE *Lchild;/左孩子struct TNODE *Rchild;/右孩子;int Permissions = 0;/权限等级NODE *HEAD;/全局变量2.4功能及算法设计Main(
7、) 主函数:调用动画函数Cartoon(),调用菜单函数Menu(),调用文件写入函数Read()完成主界面的设计。Cartoon() 动画函数:利用二维数组存储点,使用rand函数以及srand函数生成随机赋值给二维数组,printf打印二维数组,清屏,重复打印。调用密码函数Keyword()。Keyword() 密码函数:采用了fopen,fread,fwrite等函数,完成了文件的写入与写出。运行时,先从文件写出信息,将用户输入的信息与之比对,正确则将权限变量Permissions赋值为1。Menu() 菜单函数:首先判断权限变量是否为1,不为1则打印普通功能,为1则进入普通用户界面,否
8、则进入高级用户界面。随后打印系统功能,提示用户选择功能,利用switch完成功能的选取操作并选择执行相关功能函数。Read() 文件读入函数:采用了fopen,fread等函数,完成了文件的写入,定义新结点,将文件中写入的信息依次写入结点数据域,将结点挂载到链表上,重复以上操作,直到文件为空,返回链表头指针。Save() 文件写入函数:接收链表头指针,采用了fopen,fwrite等函数,完成了文件的写入。将链表中结点中数据域中信息依次写入文件,直到链表为空。Push() 压栈函数:将数据压栈。Pop() 出栈函数:将数据出栈并打印。Totle() 计算总分函数:自动计算当前链表所有节点的总分
9、。Average() 计算平均分函数:自动计算当前链表所有结点的平均分。AddNODE() 添加信息函数:接收单链表头指针 ,找到链表中最后一个结点,接收用户输入数据,将数据写入一个新结点,将结点挂载到链表上。Delet() 信息删除函数:接收单链表头指针,接收用户输入信息,依次查找单链表中信息是否有与之相匹配的,找到则询问用户是否删除,删除则孤立该结点,然后使用free释放掉。InquiryNODE() 信息查询函数:接收单链表头指针,接收用户输入信息,查询是否存在,存在则打印该学号学生信息。modifyNODE() 修改信息函数:接收单链表头指针,接收用户输入信息,在单链表中数据域比较是否
10、有与之匹配的信息,有则提示用户输入想要修改的数据,将用户输入的信息重新赋值给该结点。Browse() 浏览信息函数:接收单链表头指针,对除头结点以外的所有结点进行访问,并打印数据域中信息。SortTNODE() 排序函数:接收单链表头指针,依次将单链表中结点的数据域输入函数Tree()中,建立二叉排序树,调用Inview函数,打印出排序结果。Tree() 二叉排序树建立函数:依次接受一个值,进行插入排序建立二叉排序树,并调用Inview()函数。Inview() 二叉排序树的中序遍历函数:对二叉排序树进行中序遍历,调用push()及pop()函数,进行降序排序。Exit() 退出函数:接收链表
11、头指针,调用文件写入函数Save,并退出程序。Time() 时间函数:调用Windows API,实现获取系统时间,并使用fropen,fread等函数写入文件保存。2.5系统实现及测试Cartoon() 动画函数此为动画界面,由于是动态,所以只截了一张图,后续图片,将以此格式打印出来,但点的位置为随机,点的颜色依次从红,黄,蓝,绿,青,橙,紫变化。Keyword() 密码函数密码输入界面,密码初始输入必须为,以及,。如果密码输入不对则进入普通用户界面。Main()主菜单函数此为密码输错界面,只可进行学生信息的查找以及浏览,输入数字1,2,3进行相关操作。Main()主菜单函数密码输对界面,可
12、使用添加,删除,查询,修改,浏览,密码修改,时间查询等操作,输入对应数字进行操作。Browse() 浏览信息函数第一次进入系统,使用浏览函数浏览信息,发现为空,证明文件内未包含任何信息。AddNODE() 添加信息函数使用了添加功能,输入了两个学生信息。Browse() 浏览信息函数添加完进行浏览,发现添加学生信息成功,成功的打印出了刚添加的学生信息。InquiryNODE() 信息查询函数使用查询函数,查询刚才添加的两个学生信息,发现查询成功,打印出了这两个学生信息。Delet() 信息删除函数使用删除功能,删除了学号为的学生信息。InquiryNODE() 信息查询函数使用浏览功能,删除后
13、浏览发现,删除的学号为的学生信息不在打印出来,证明删除成功。SortTNODE() 排序函数使用了排序功能,成功由高到低依次打印出了各项成绩。Time() 时间函数使用查看系统时间功能,成功打印出了上一次进入系统的时间,以及现在的系统时间。2.6调试及解决方案在动画函数的运行时,由于采用的是二维数组,以随机数方式打印“.”,达到动画效果,发生了堆栈溢出的情况,随后百度以及检查代码,发现是数组的使用越界 在输入数据时,发现会自动跳过,于是采用了scanf_s( %d),的方式(在%前方加空格),但是发现效果不如人意,随后便在scanf_s前面加fflush(stdin);清除标准输入输出缓冲区
14、在用scanf_s接收字符数组时,会出现失败的现象,后采用get_s解决此问题 在文件的写入时,开始会报错,错误提示为stream为空,后发现是指针的指向问题,以及指针未能及时的释放。 在排序过程中,因为二叉排序树的建立中根结点的建立与,其他子树的不同,根结点在建立时,并没有赋值,采取在sortTNODE()函数中,先给根结点赋值,解决问题。 在把组内成员的写好的代码拿来拼接的时候,多次调试,无法拼接成功,采用函数形参相同的方式,定义一个全局变量的头指针,方解决。3总结及心得体会此次实践课编写的是一个应用程序,相对于以前我们见的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在共同的努力的下,我们一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可是毕竟是第一次独立完成这样的大程序,结果还不是太理想。由于时间很短,在选题报告中设想到的好多功能都没有实现。已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。如:再录入数据时,没有设计数据输入出错的提示,如果成绩输的是负值程序也继续执行,这就给运用上带来一些不便;没有设计按各科成绩排序的功能。2.在设计过程中的感受:本次数据结构课程设计让我们对计算机语言的学习又有了更深入的了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业行政单位审计制度
- 内部审计及风险管理制度
- 基金业风控制度
- 内部审计风险防控制度
- 医院政府采购审计制度
- 呆帐核销专项审计制度
- 脑外伤头痛患者的音乐疗法
- 小额贷款风控制度
- 小学控烟培训教育制度
- 员工消防培训教育制度
- 神州数码集团在线测评题
- 掺混肥料生产管理制度
- 2026年安徽财贸职业学院单招综合素质笔试备考试题附答案详解
- 2026内蒙古事业单位招聘第一阶段减少招聘人数岗位(公共基础知识)测试题附答案
- 胆总管结石课件
- 入孵合同解除协议
- 数据出境安全协议
- 护士交接班礼仪
- 2025年10月自考05677法理学试题及答案含评分参考
- 2025年专升本旅游管理历年真题汇编试卷及答案
- 2026年辽宁医药职业学院单招职业适应性测试必刷测试卷及答案1套
评论
0/150
提交评论