c语言课程设计-学生学籍信息管理系统.doc
学年论文(课程论文、课程设计)题目:学生学籍信息管理系统 作者: 所在学院: 信息科学与工程学院 专业年级: 指导教师: 职称:讲师 2014年 12月 31日 目录1. 设计内容、任务以及要求. 1.1设计内容、任务 1.2 设计要求2. 设计思路概述. 2.1 系统基本功能 2.2 具体设计思想 2.3 系统的总体流程图3. 函数设计的实现. 3.1 结构的定义 3.2 各个函数的设计简介 3.3源代码 3.4删除模块的详细介绍4. 重点程序的调试及运行. 删除函数的测试 5. 总结.6. 致谢.7. 参考文献.1. 设计内容、任务以及要求 1.1 设计内容、任务主要利用c语言的文件操作能力设计开发一个学生学籍管理系统,至少具有如下功能:信息输入、输出、查找、删除、成绩排序等功能。具体内容如下:(1) 通过提示菜单选择可以进行的操作;(2) 将学生的信息存入文件中,并命名为txl.txt;(3) 在本系统中可以进行管理系统包含的基本操作: a. 查看所有学生信息; b. 输入一个学生的姓名或学号,从当前的信息中查找,如果找到则显示该学生的相关信息,如果没找到则给出相关提示信息; c. 输入一个学生的姓名或学号,从当前信息中查找,如果找到则删除该学生的基本信息,如果没找到则给出相关提示信息; d. 将学生的成绩按降序排序;Txl.txt文件中:(4) 学生基本信息包括:学号、姓名、性别、班级、籍贯、分数等简单信息;1.2设计要求 明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用c语言进行文件操作的编程技术水平;初步了解软件开发的一般方法和步骤。2. 设计思路概述 2.1 系统基本功能 外部操作:根据要求系统要有查看全部学生信息,查找、添加、删除某一个学生信息; 内部操作:将学生的信息存入文件中,并命名为txl.txt;为了接近实际学生学籍管理系统,增加了一个权限认证功能(使用前需要输入正确的账号及密码)。 2.2 具体设计思想(1) 以结构化各个功能模块,函数间的调用精简整个函数;(2) 以全局结构来随时定义结构数组及其结构;(3) 以写一个信息存一个的思想,实现多个添加功能;(4) 以先全部读入内存,再打印信息的思想,实现显示全部信息;(5) 以先判断再打印的思想,实现查找是否有某一学生信息;(6) 以先判断再删除的思想,实现删除某一学生信息;(7) 以选择排序算法的思想,实现学生成绩的排序2.3 系统的总体流程图权限确认进入系统检索信息选择菜单输出信息退出程序成绩排序建立档案删除信息按学号查找按姓名查找按姓名查找按学号查找3.函数设计的实现3.1 结构的定义及宏定义 为了方便使用结构此系统结构全为全局类型定义,如下:struct student_infochar no11;int age;enum SEX sex;char name20;int classno;float grade;char nationality20;typedef struct student_info STUINFO;STUINFO txl100;宏定义#define A 1#define B 2#define C 3#define D 4#define E 5#define F 0全局变量int last=0;3.2各个函数的设计简介此系统一共十九个函数如下所示1) int Key(char,char);比较判断账户名和账户密码是否正确2)int ck(void);显示提示窗口提示密码或者账户名错误,用鼠标回到程序3)void getpassword();密码函数4)void findchoice();检索模块中的选择查找方式的函数5)void findmenu();显示查找或删除菜单界面6)void numfind();实现按学号查找并输出功能7)void namfind();实现按姓名查找并输出功能8)void Establish();将学生信息写入内存并保存入文件9)void dochoice(int);接受用户的选择,并启动相应函数10)void mainmenu();显示主菜单11)void Bead();将文件读取到内存中12)oid Write();将内存中的学生信息写入文件中13)int getchoice();接受用户的选择键,并传送至dochoice(int)函数14)void Sort();实现排序功能15)void Outputall();输出全部信息16)void findchoicedelete();17)void Numdelete();实现按学号删除功能18)void Namdelete();实现按姓名删除功能19) int main(int argc,char *argv)主函数实现调用所有其他函数功能3.3源代码#include <stdio.h>#include <string.h>#include <stdlib.h>#include <memory.h>#include <conio.h> #include <windows.h>#define A 1#define B 2#define C 3#define D 4#define E 5#define F 0FILE *fp;enum SEX male,female;struct student_infochar no11;int age;enum SEX sex;char name20;int classno;float grade;char nationality20;typedef struct student_info STUINFO;STUINFO txl100;int last=0;int Key(char,char);int ck(void);void getpassword();void findchoice();void findmenu();void numfind();void namfind();void Establish();void dochoice(int);void mainmenu();void Bead();void Write();int getchoice();void Sort();void Outputall();void findchoicedelete();void Numdelete();void Namdelete();int main(int argc,char *argv)int choice;getpassword();Bead();while(1)mainmenu();choice=getchoice();dochoice(choice);system("pause>nu1");return 0;void Bead() /从文件中把内容读取到内存中 int i=0;if(fp=fopen("txl.txt","rb")=NULL)printf("文件读取失败,请检查文件是否存在!");last=0;elsewhile(!feof(fp) if(fread(&txli,sizeof(STUINFO),1,fp)=1) i+;last=i;fclose(fp);void Write() /将内存中的内容写到文件中 int i=0;if(fp=fopen("txl.txt","wb")=NULL)printf("文件储存失败,请检查文件是否存在!");exit(0);while(i<last)fwrite(&txli,sizeof(STUINFO),1,fp);i+;fclose(fp);void mainmenu() /主菜单 system("cls");printf("tt =欢迎进入新疆大学学籍管理系统=n");printf("tt 请选择以下操作:n");printf("tt 1.建立档案: 2.检索信息: n");printf("tt 3.输出全部信息: 4.排序: n");printf("tt 5.删除档案 0.退出 n");printf("tt =");printf("n给出你的选择 0-5 n");void Establish() /建立档案char sex;printf("第 %d 个学生的学号:n",last+1);scanf("%s",&txllast.no);printf("姓名:n");scanf("%s",&txllast.name);printf("年龄:n");scanf("%d",&txllast.age);printf("分数:n");scanf("%f",&txllast.grade);printf("班级:n");scanf("%d",&txllast.classno);printf("籍贯:n");scanf("%s",&txllast.nationality);while(1)fflush(stdin); /清除键盘缓存 printf("性别(m/f):n");scanf("%c",&sex);if(sex='f'|sex='m')break;fflush(stdin);txllast.sex=(sex='m')? male :female;last+;Write();void namfind() /按姓名查找 char name20;int i;int find=0;printf("请输入姓名:");scanf("%s",&name);for(i=0;i<last && !find;i+) if(!strcmp(name,txli.name) find=1;printf("=n");printf("学号: %sn",txli.no); printf("姓名: %sn",txli.name); printf("年龄: %dn",txli.age); printf("分数: %4.1fn",txli.grade); printf("籍贯: %sn",txli.nationality); printf("性别: %s",(txli.sex=male)? "male":"female"); if (!find) printf("对不起,姓名:%s 没有被找到",name); void numfind() /按学号查找 int i;char num112;int find=0;printf("请输入您要查询的学号:");scanf("%s",&num1);for(i=0;i<last && !find;i+)if(!strcmp(num1,txli.no)break;if(i<last && !find)printf("学号为%s的学生的基本信息为:n",num1);printf("学号: %sn",txli.no); printf("姓名: %sn",txli.name); printf("年龄: %dn",txli.age); printf("分数: %4.1fn",txli.grade); printf("籍贯: %sn",txli.nationality); printf("性别: %s",(txli.sex=male)? "male":"female"); printf("n"); else printf("您输入的学号不存在!n");int getchoice() /获得选择 int choice;scanf("%d",&choice);return choice;void dochoice(int choice)/ switch(choice) case A:Establish();break; case B:findmenu();findchoice();break; case C: Outputall();break;case D:Sort();Outputall();break; case E:findmenu();findchoicedelete();break; case F:exit(0); void findchoice() /选择查找方式 int m;while(1)scanf("%d",&m);switch(m)case 1:numfind();findmenu();break;case 2:namfind(); findmenu();break; case 0:break; if (m=0) break;mainmenu();void findmenu() /查找/删除界面printf("tt*n");printf("tt* 欢迎使用查找/删除操作 *n"); printf("tt* 1.按学号查找/删除 *n"); printf("tt* 2.按姓名查找/删除 *n");printf("tt* 0.返回上一级 *n"); printf("tt*n"); printf("tt请输入0-2: "); void findchoicedelete() /选择删除方式 int m;while(1)scanf("%d",&m);switch(m)case 2:Namdelete();findmenu();break;case 1:Numdelete(); findmenu();break; case 0:break; if (m=0) break; mainmenu();void Sort() /排序 int i,j,k;STUINFO p;for(i=0;i<last-1;i+)k=i;for(j=i+1;j<last;j+)if(txlj.grade>txlk.grade)k=j;if(k!=i)p=txli;txli=txlk;txlk=p;void Outputall() /输出全部信息int i;printf(" 学号t 年龄 姓名 性别 籍贯 分数n" );for(i=0;i<last;i+) printf("%-s ",txli.no); printf("%-4d ",txli.age); printf("%-6s ",txli.name); printf(" %-4s ",(txli.sex=male)? "male":"female"); printf(" %-4s ",txli.nationality); printf(" %-4.1f ",txli.grade); printf("n"); int Key(char p20,char q20)if(strcmp(p,"名字")=0&&strcmp(q,"nishengri")=0)return 0;elsereturn 1;void getpassword()char p20,q20;printf("请输入账号名-n");scanf("%s",&p);printf("请输入账号密码-n");scanf("%s",&q);Key(p,q);if (Key(p,q)=0);elsesystem("cls"); ck();getpassword();void Namdelete() /按姓名删除 char name20;int i,mark;int find=0;printf("请输入姓名:");scanf("%s",&name);for(i=0;i<last && !find;i+) if(!strcmp(name,txli.name) find=1;mark=i;break; if (!find) printf("sorry,name:%s 没有输入!",name); else for(i=mark;i<=last;i+) txli=txli+1; last-; Write();printf("删除成功!n");void Numdelete() /按学号删除 char no20;int i,mark;int find=0;printf("请输入学号");scanf("%s",&no);for(i=0;i<last && !find;i+) if(!strcmp(no,txli.no) find=1;mark=i;break; if (!find) printf("对不起,学号:%s 没有输入",no); else for(i=mark;i<=last;i+) txli=txli+1; last-; Write(); printf("删除成功.n"); int ck(void)MessageBox(NULL,"密码或用户名错误","错误提示",MB_OK); return 0;3.4删除模块的详细介绍下面只重点介绍删除模块函数的设计与实现。1) 功能介绍:删除函数主要是将已保存的某个学生信息删除,且保证其他学生的信息不受影响,适应于实际情况中的学生转学等其他特殊情况。2) 设计思想:在c语言中,要想删除信息,只能利用覆盖思想,但为了不影响其他信息,要将后面的信息逐次往前覆盖,直到被删除信息的前一个人的信息。最后将删除调整后的新信息重新保存入文件中,覆盖原来的文件,从而达到将文件中某个信息删除的目的。3) 具体设计void findmenu() /查找/删除界面printf("tt* *n");printf("tt* 欢迎使用查找/删除操作 *n"); printf("tt* 1.按学号查找/删除 *n");printf("tt* 2.按姓名查找/删除 *n");printf("tt* 0.返回上一级 *n"); printf("tt*n"); printf("tt请输入0-2: "); 先借用了检索函数的菜单,执行下面的程序=void findchoicedelete() /选择删除方式 int m;while(1)scanf("%d",&m);switch(m)case 2:Namdelete();findmenu();break;case 1:Numdelete(); findmenu();break; case 0:break; if (m=0) break; mainmenu();定义一个接受选择的变量m,利用switch的分支选择功能启动下一个函数-利用姓名删除功能还是学号删除功能或是选择返回。同时利用死循环使该功能不断进行下去,直到用户主动退出。=void Namdelete() /按姓名删除 char name20;int i,mark;int find=0;printf("请输入姓名:");scanf("%s",&name);for(i=0;i<last && !find;i+) if(!strcmp(name,txli.name) find=1;mark=i;break; if (!find) printf("sorry,name:%s 没有输入!",name); else for(i=mark;i<=last;i+) txli=txli+1; last-; Write();printf("删除成功!n");先定义一个数组 name20来存放查找的姓名,再定义计数变量i,标志变量mark,用来标记被删除信息的结构体数组下标;定义find来做显示是否查找到学生信息的标志。利用循环将文件中各个名字与所找名字做比较,如果有相同的或者比较完毕则跳出比较循环,找到相同的若则将所找下标赋给mark,将find的值改变,否则跳出循环。跳出后判断find是否改变,若没改变则输出提示信息表示没找到,否则从namemark将后面的信息依次向前覆盖,并将全局变量减一。最后调用Write()保存入文件,并输出提示信息。=void Numdelete() /按学号删除 char no20;int i,mark;int find=0;printf("请输入学号");scanf("%s",&no);for(i=0;i<last && !find;i+) if(!strcmp(no,txli.no) find=1;mark=i;break; if (!find) printf("对不起,学号:%s 没有输入",no); else for(i=mark;i<=last;i+) txli=txli+1; last-; Write(); printf("删除成功.n"); 该函数与按姓名查找函数相似,只是将姓名比较改为学号比较,此处不再赘述。4. 删除模块的测试 先显示主菜单1. 先把文件中的所有信息输出一遍2. 将学生朱佳辉的信息删除,选择53. 选择1,按学号删除删除成功后再测试若输入学号不对的情况再看文件中的变化删除前删除后5. 总结经过小学期的程序设计学习,我们锻炼了动手能力和查阅文献资料的能力,巩固了c语言知识,基本掌握程序设计的基本方法和步骤。但更重要的是,通过大作业的练习,是我们充分感悟到c程序设计的本质是什么,要做好一个程序,基础知识必不可少,但更重要的是其思维方式,即算法思想,如果在动手之前心中没有一个略显雏形的算法,那么以下所做的一切都是浪费时间,所以思考永远是第一位。6. 致谢在这个为期六周的小学期中,我学到了很多知识,提高了自己的能力,这些都少不了老师的耐心指导。同时还有同学的帮助,帮我解决了很多困难,给我了很多鼓励,使我穿过了很多障碍,取得了很大进步。还要感谢我的父母,是他们给了我机会来学习。还要感谢所有为教育事业做出奉献的人。7. 参考文献1王敬华.c语言程序设计教程.清华大学出版社.2009.2王一萍.c程序设计与项目实践.清华大学出版社.2011.新疆大学课程论文(设计)、学年论文评分表题 目作 者专业年级指导教师指导教师评语及评分建议 指导教师: 年 月 日院(部)或教研室意见 学院或教研室主任: 年 月 日1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器7. 单片机控制的二级倒立摆系统的研究8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO,2激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制32. 基于单片机系统的多功能温度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 46. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54. 基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压器油色谱在线监测技术研究 66. 基于单片机的膛壁温度报警系统设计 67. 基于AVR单片机的低压无功补偿控制器的设计 68. 基于单片机船舶电力推进电机监测系统 69. 基于单片机网络的振动信号的采集系统 70. 基于单片机的大容量数据存储技术的应用研究 71. 基于单片机的叠图机研究与教学方法实践 72. 基于单片机嵌入式Web服务器技术的研究及实现 73. 基于AT89S52单片机的通用数据采集系统 74. 基于单片机的多道脉冲幅度分析仪研究 75. 机器人旋转电弧传感角焊缝跟踪单片机控制系统 76. 基于单片机的控制系统在PLC虚拟教学实验中的应用研究77. 基于单片机系统的网络通信研究与应用 78. 基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究79. 基于单片机的模糊控制器在工业电阻炉上的应用研究 80. 基于双单片机冲床数控系统的研究与开发 81. 基于Cygnal单片机的C/OS-的研究82. 基于单片机的一体化智能差示扫描量热仪系统研究 83. 基于TCP/IP协议的单片机与Internet互联的研究与实现 84. 变频调速液压电梯