1、学年论文(课程论文、课程设计)题目:学生学籍信息管理系统 作者: 所在学院: 信息科学与工程学院 专业年级: 指导教师: 职称:讲师 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语言的文件操作能
2、力设计开发一个学生学籍管理系统,至少具有如下功能:信息输入、输出、查找、删除、成绩排序等功能。具体内容如下:(1) 通过提示菜单选择可以进行的操作;(2) 将学生的信息存入文件中,并命名为txl.txt;(3) 在本系统中可以进行管理系统包含的基本操作: a. 查看所有学生信息; b. 输入一个学生的姓名或学号,从当前的信息中查找,如果找到则显示该学生的相关信息,如果没找到则给出相关提示信息; c. 输入一个学生的姓名或学号,从当前信息中查找,如果找到则删除该学生的基本信息,如果没找到则给出相关提示信息; d. 将学生的成绩按降序排序;Txl.txt文件中:(4) 学生基本信息包括:学号、姓名
3、、性别、班级、籍贯、分数等简单信息;1.2设计要求 明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用c语言进行文件操作的编程技术水平;初步了解软件开发的一般方法和步骤。2. 设计思路概述 2.1 系统基本功能 外部操作:根据要求系统要有查看全部学生信息,查找、添加、删除某一个学生信息; 内部操作:将学生的信息存入文件中,并命名为txl.txt;为了接近实际学生学籍管理系统,增加了一个权限认证功能(使用前需要输入正确的账号及密码)。 2.2 具体设计思想(1) 以结构化各个功能模块,函数间的调用精简整个函数;(2)
4、 以全局结构来随时定义结构数组及其结构;(3) 以写一个信息存一个的思想,实现多个添加功能;(4) 以先全部读入内存,再打印信息的思想,实现显示全部信息;(5) 以先判断再打印的思想,实现查找是否有某一学生信息;(6) 以先判断再删除的思想,实现删除某一学生信息;(7) 以选择排序算法的思想,实现学生成绩的排序2.3 系统的总体流程图权限确认进入系统检索信息选择菜单输出信息退出程序成绩排序建立档案删除信息按学号查找按姓名查找按姓名查找按学号查找3.函数设计的实现3.1 结构的定义及宏定义 为了方便使用结构此系统结构全为全局类型定义,如下:struct student_infochar no11
5、;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);显示提示窗口提示密
6、码或者账户名错误,用鼠标回到程序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();将内存中
7、的学生信息写入文件中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 #include #include #include #include #include #de
8、fine 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 get
9、password();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;getpa
10、ssword();Bead();while(1)mainmenu();choice=getchoice();dochoice(choice);system(pausenu1);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() /将内存中的内容写到文件
11、中 int i=0;if(fp=fopen(txl.txt,wb)=NULL)printf(文件储存失败,请检查文件是否存在!);exit(0);while(ilast)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);
12、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.n
13、ationality);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;ilast & !find;i+) if(!strcmp(name,txli.name) find=1
14、;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(请
15、输入您要查询的学号:);scanf(%s,&num1);for(i=0;ilast & !find;i+)if(!strcmp(num1,txli.no)break;if(ilast & !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=mal
16、e)? 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(
17、);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.按学号查找/
18、删除 *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
19、;STUINFO p;for(i=0;ilast-1;i+)k=i;for(j=i+1;jtxlk.grade)k=j;if(k!=i)p=txli;txli=txlk;txlk=p;void Outputall() /输出全部信息int i;printf( 学号t 年龄 姓名 性别 籍贯 分数n );for(i=0;ilast;i+) printf(%-s ,txli.no); printf(%-4d ,txli.age); printf(%-6s ,txli.name); printf( %-4s ,(txli.sex=male)? male:female); printf( %-4s ,
20、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();
21、void Namdelete() /按姓名删除 char name20;int i,mark;int find=0;printf(请输入姓名:);scanf(%s,&name);for(i=0;ilast & !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() /按学号删
22、除 char no20;int i,mark;int find=0;printf(请输入学号);scanf(%s,&no);for(i=0;ilast & !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
23、;3.4删除模块的详细介绍下面只重点介绍删除模块函数的设计与实现。1) 功能介绍:删除函数主要是将已保存的某个学生信息删除,且保证其他学生的信息不受影响,适应于实际情况中的学生转学等其他特殊情况。2) 设计思想:在c语言中,要想删除信息,只能利用覆盖思想,但为了不影响其他信息,要将后面的信息逐次往前覆盖,直到被删除信息的前一个人的信息。最后将删除调整后的新信息重新保存入文件中,覆盖原来的文件,从而达到将文件中某个信息删除的目的。3) 具体设计void findmenu() /查找/删除界面printf(tt* *n);printf(tt* 欢迎使用查找/删除操作 *n); printf(tt*
24、 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
25、();定义一个接受选择的变量m,利用switch的分支选择功能启动下一个函数-利用姓名删除功能还是学号删除功能或是选择返回。同时利用死循环使该功能不断进行下去,直到用户主动退出。=void Namdelete() /按姓名删除 char name20;int i,mark;int find=0;printf(请输入姓名:);scanf(%s,&name);for(i=0;ilast & !find;i+) if(!strcmp(name,txli.name) find=1;mark=i;break; if (!find) printf(sorry,name:%s 没有输入!,name); el
26、se for(i=mark;i=last;i+) txli=txli+1; last-; Write();printf(删除成功!n);先定义一个数组 name20来存放查找的姓名,再定义计数变量i,标志变量mark,用来标记被删除信息的结构体数组下标;定义find来做显示是否查找到学生信息的标志。利用循环将文件中各个名字与所找名字做比较,如果有相同的或者比较完毕则跳出比较循环,找到相同的若则将所找下标赋给mark,将find的值改变,否则跳出循环。跳出后判断find是否改变,若没改变则输出提示信息表示没找到,否则从namemark将后面的信息依次向前覆盖,并将全局变量减一。最后调用Write
27、()保存入文件,并输出提示信息。=void Numdelete() /按学号删除 char no20;int i,mark;int find=0;printf(请输入学号);scanf(%s,&no);for(i=0;ilast & !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); 该函数与按姓名查找函数相似,只是将姓名
28、比较改为学号比较,此处不再赘述。4. 删除模块的测试 先显示主菜单1. 先把文件中的所有信息输出一遍2. 将学生朱佳辉的信息删除,选择53. 选择1,按学号删除删除成功后再测试若输入学号不对的情况再看文件中的变化删除前删除后5. 总结经过小学期的程序设计学习,我们锻炼了动手能力和查阅文献资料的能力,巩固了c语言知识,基本掌握程序设计的基本方法和步骤。但更重要的是,通过大作业的练习,是我们充分感悟到c程序设计的本质是什么,要做好一个程序,基础知识必不可少,但更重要的是其思维方式,即算法思想,如果在动手之前心中没有一个略显雏形的算法,那么以下所做的一切都是浪费时间,所以思考永远是第一位。6. 致谢
29、在这个为期六周的小学期中,我学到了很多知识,提高了自己的能力,这些都少不了老师的耐心指导。同时还有同学的帮助,帮我解决了很多困难,给我了很多鼓励,使我穿过了很多障碍,取得了很大进步。还要感谢我的父母,是他们给了我机会来学习。还要感谢所有为教育事业做出奉献的人。7. 参考文献1王敬华.c语言程序设计教程.清华大学出版社.2009.2王一萍.c程序设计与项目实践.清华大学出版社.2011.新疆大学课程论文(设计)、学年论文评分表题 目作 者专业年级指导教师指导教师评语及评分建议 指导教师: 年 月 日院(部)或教研室意见 学院或教研室主任: 年 月 日目 录第一章 总 论1第二章 项目提出的背景和
30、必要性4第一节 项目建设背景4第二节 项目建设的必要性4第三节 项目建设的先进性8第三章 市场分析与建设规模10第一节 市场分析10第二节 建设规模11第四章 工艺技术方案及设备选型12第一节 工艺技术方案12第二节 主要设备方案14第五章 原料、辅助材料及燃料的供应17第一节 主要原材料、辅助材料及公用工程供应来源17第二节 主要公用工程用量及供应18第六章 厂址选择和建设条件19第一节 厂址选择19第二节 建设条件19第七章 总图运输、土建及公用工程22第一节 总平面布置及运输22第二节 土建方案23第三节 公用工程24第八章 节 能29第一节 用能标准及设计规范29第二节 项目能源消耗种类及消耗情况30第三节 项目节能措施及效果分析31第九章 环境保护33第十章 劳动安全卫生及消防36第一节 劳动安全卫生36第二节 消 防38第十一章 机构组织与人力资源配置41第十二章 工程进度安排43第十三章 投资估算和资金筹措45第十四章 财务评价47第十五章风险分析50第一节 项目主要风险因素识别及应对措施50第二节 项目风险因素和风险程度分析表51第十六章 结论与建议54