1、电子科技大学成全部学院计算机系实践类关键课程设计汇报课 程 名 称:程序设计实践2设 计 题 目:学生信息管理系统指导 老师 组:周舸组长学号姓名: 何金城组员学号姓名: 唐震计算机系制6月1.0项目需求分析伴随学生管理复杂度提升,单纯文本管理已经无法满足学校教务要求,学生管理系统开始大量涌入高校,同时伴随学生管理系统涌入我们高校,怎样更便利对学生信息进行系统和有序操作,成为了我们需要考虑问题。1.1设计内容本项目利用C语言程序设计一个学生信息管理系统。系统功效关键有:学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览,系统密码管理,系统时间查询,和在对应硬盘上面进行存盘以预
2、防部分数据丢失。本系统功效模块图图1所表示。图1.学生信息管理系统功效模块图1.2 设计要求需要有系统功效:学生信息添加,学生信息修改,学生信息删除,学生信息查询,学生信息浏览等功效;并能够在文件中存放学生信息,使得第二次打开依旧会保留上次操作2.1程序功效分析Main() 主函数:调用动画函数,调用菜单函数,调用文件信息读入函数。Cartoon() 动画函数:打印进入动画,调用密码函数。Keyword() 密码函数:限制进入系统人权限。Menu() 菜单函数:打印系统功效,并选择实施功效,有打印提醒使用者。Read() 文件读入函数:从数据文件读入数据,进入链表,并返回头节点。Save()
3、文件写入函数:将单链表中数据,写入文件中。Push() 压栈函数:将数据压栈。Pop() 出栈函数:将数据出栈并打印。Totle() 计算总分函数:自动计算目前链表全部节点总分。Average() 计算平均分函数:自动计算目前链表全部结点平均分。AddNODE() 添加信息函数:在单链表最末端添加信息。Delet() 信息删除函数:找到需要删除学生结点,并删除该结点。InquiryNODE 信息查询函数:找到所查询信息所在结点,并打印该结点全部数据。modifyNODE() 修改信息函数:找到需要修改信息结点,让使用者输入修改后数据,输入目前链表结点中。Browse() 浏览信息函数:对除头结
4、点以外全部结点进行访问,并打印数据。SortTNODE() 排序函数:依次将单链表中,各科成绩输入函数Tree()中,建立二叉排序树。Tree() 二叉排序树建立函数:依次接收一个值,进行插入排序建立二叉排序树,并调用Inview()函数。Inview() 二叉排序树中序遍历函数:对二叉排序树进行中序遍历,调用push()及pop()函数,进行降序排序。Exit() 退出函数:调用文件写入函数,并退出程序。Time() 时间函数:调用Windows API,实现获取系统时间,并保留。2.2程序功效结构AddNODE() Delet() InquiryNODE() ModifyNODE() Br
5、owse() 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;int Pas;pass2;/密码结构体数组struct Time
6、/时间信息结构体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() 主函数:调用动画函数Cartoon(),调用菜单函数Menu()
7、,调用文件写入函数Read()完成主界面设计。Cartoon() 动画函数:利用二维数组存放点,使用rand函数和srand函数生成随机赋值给二维数组,printf打印二维数组,清屏,反复打印。调用密码函数Keyword()。Keyword() 密码函数:采取了fopen,fread,fwrite等函数,完成了文件写入和写出。运行时,先从文件写出信息,将用户输入信息和之比对,正确则将权限变量Permissions赋值为1。Menu() 菜单函数:首先判定权限变量是否为1,不为1则打印一般功效,为1则进入一般用户界面,不然进入高级用户界面。随即打印系统功效,提醒用户选择功效,利用switch完成
8、功效选择操作并选择实施相关功效函数。Read() 文件读入函数:采取了fopen,fread等函数,完成了文件写入,定义新结点,将文件中写入信息依次写入结点数据域,将结点挂载到链表上,反复以上操作,直到文件为空,返回链表头指针。Save() 文件写入函数:接收链表头指针,采取了fopen,fwrite等函数,完成了文件写入。将链表中结点中数据域中信息依次写入文件,直到链表为空。Push() 压栈函数:将数据压栈。Pop() 出栈函数:将数据出栈并打印。Totle() 计算总分函数:自动计算目前链表全部节点总分。Average() 计算平均分函数:自动计算目前链表全部结点平均分。AddNODE(
9、) 添加信息函数:接收单链表头指针 ,找到链表中最终一个结点,接收用户输入数据,将数据写入一个新结点,将结点挂载到链表上。Delet() 信息删除函数:接收单链表头指针,接收用户输入信息,依次查找单链表中信息是否有和之相匹配,找到则问询用户是否删除,删除则孤立该结点,然后使用free释放掉。InquiryNODE() 信息查询函数:接收单链表头指针,接收用户输入信息,查询是否存在,存在则打印该学号学生信息。modifyNODE() 修改信息函数:接收单链表头指针,接收用户输入信息,在单链表中数据域比较是否有和之匹配信息,有则提醒用户输入想要修改数据,将用户输入信息重新赋值给该结点。Browse
10、() 浏览信息函数:接收单链表头指针,对除头结点以外全部结点进行访问,并打印数据域中信息。SortTNODE() 排序函数:接收单链表头指针,依次将单链表中结点数据域输入函数Tree()中,建立二叉排序树,调用Inview函数,打印出排序结果。Tree() 二叉排序树建立函数:依次接收一个值,进行插入排序建立二叉排序树,并调用Inview()函数。Inview() 二叉排序树中序遍历函数:对二叉排序树进行中序遍历,调用push()及pop()函数,进行降序排序。Exit() 退出函数:接收链表头指针,调用文件写入函数Save,并退出程序。Time() 时间函数:调用Windows API,实现
11、获取系统时间,并使用fropen,fread等函数写入文件保留。2.5系统实现及测试Cartoon() 动画函数此为动画界面,因为是动态,所以只截了一张图,后续图片,将以此格式打印出来,但点位置为随机,点颜色依次从红,黄,蓝,绿,青,橙,紫改变。Keyword() 密码函数密码输入界面,密码初始输入必需为,610103和,610105。假如密码输入不对则进入一般用户界面。Main()主菜单函数此为密码输错界面,只可进行学生信息查找和浏览,输入数字1,2,3进行相关操作。Main()主菜单函数密码输对界面,可使用添加,删除,查询,修改,浏览,密码修改,时间查询等操作,输入对应数字进行操作。Bro
12、wse() 浏览信息函数第一次进入系统,使用浏览函数浏览信息,发觉为空,证实文件内未包含任何信息。AddNODE() 添加信息函数使用了添加功效,输入了两个学生信息。Browse() 浏览信息函数添加完进行浏览,发觉添加学生信息成功,成功打印出了刚添加学生信息。InquiryNODE() 信息查询函数使用查询函数,查询刚才添加两个学生信息,发觉查询成功,打印出了这两个学生信息。Delet() 信息删除函数使用删除功效,删除了学号为学生信息。InquiryNODE() 信息查询函数使用浏览功效,删除后浏览发觉,删除学号为学生信息不在打印出来,证实删除成功。SortTNODE() 排序函数使用了排
13、序功效,成功由高到低依次打印出了各项成绩。Time() 时间函数使用查看系统时间功效,成功打印出了上一次进入系统时间,和现在系统时间。2.6调试及处理方案在动画函数运行时,因为采取是二维数组,以随机数方法打印“.”,达成动画效果,发生了堆栈溢出情况,随即baidu和检验代码,发觉是数组使用越界 在输入数据时,发觉会自动跳过,于是采取了scanf_s( %d),方法(在%前方加空格),不过发觉效果不如人意,随即便在scanf_s前面加fflush(stdin);清除标准输入输出缓冲区 在用scanf_s接收字符数组时,会出现失败现象,后采取get_s处理此问题 在文件写入时,开始会报错,错误提醒
14、为stream为空,后发觉是指针指向问题,和指针未能立即释放。 在排序过程中,因为二叉排序树建立中根结点建立和,其它子树不一样,根结点在建立时,并没有赋值,采取在sortTNODE()函数中,先给根结点赋值,处理问题。 在把组内组员写好代码拿来拼接时候,数次调试,无法拼接成功,采取函数形参相同方法,定义一个全局变量头指针,方处理。3总结及心得体会此次实践课编写是一个应用程序,相对于以前我们见程序,它要大得多,运行结果也没有预想中好,数据输出格式不太规范,而且各模块也出现了部分小问题,在共同努力下,我们一次又一次进行修改,最终运行结果基础上达成了预期目标。可是毕竟是第一次独立完成这么大程序,结果
15、还不是太理想。因为时间很短,在选题汇报中设想到好多功效全部没有实现。已经有那些功效虽已能基础上满足用户需要,但假如还有更多功效程序就会愈加完美。如:再录入数据时,没有设计数据输入犯错提醒,假如成绩输是负值程序也继续实施,这就给利用上带来部分不便;没有设计按各科成绩排序功效。2.在设计过程中感受:此次数据结构课程设计让我们对计算机语言学习又有了更深入了解,也让我们更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到知识远远超出了在课堂上十几周学到,课程安排这次设计让我们这些实践知识匮乏大学生增添了很多经验,为我们未来走上工作岗位其了不小铺垫作用。此次课程设计中我们碰到了很多以前没有碰到过问题,也曾想要放弃,但看到其它组同学全部在那认真写程序,给了我们继续信心。共同努力下,我们顺利结束了此次课程设计,让我们知道原来凭借自己努力取得成功会让自己这么欣慰,也让我们知道了友谊和团结关键性。