版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计报告书 题目:学生信息管理系统设计 学 院 电子与信息学院 专 业 电子信息类 学生姓名 学生学号 指导教师 课程编号 135160 课程学分 1学分 起始日期 2015年4月20日 教师评语教师签名:日期:成绩评定备注 课程设计任务书1.1 课程设计内容:题目:学生信息管理系统设计学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。提供以下功能:1、系统以菜单方式工作2、学生信息录入功能(学生信息用文件保存)输入3、学生信息浏览功能输出4、学生信息查询功能算法,按学号、姓名等查询5、学生信息的删除与修改1.2 实施步骤 1、 初步完成总体设计,设计好框架,确
2、定人机对话的界面,确定函数个数。2、 建立一个文件,将每位学生的信息写入所建立的学生信息文本中,方便以后按照不同操作查找学生信息。3、 完成上述信息查询、浏览、删除和修改等功能。1.3 要求1、 用C语言实现程序设计;2、 利用结构体数组实现学生信息的数据结构设计;3、 系统的各个功能模块要求用函数的形式实现;4、 界面友好(良好的人机交互),程序加必要的注释。 目 录一、选题背景.1 1.1 本课题应解决的主要问题.1 1.2 应达到的技术要求.1 1.3 指导思想.1 1.4 功能.1二、方案论证(设计理念).2 2.1 设计原理.2 2.2 方案选择.2 2.3 选择原因及特点介绍.2三
3、、过程论述.2 3.1 数据类型说明.2 3.2 函数类型说明.3 3.3 流程图说明.6四、结果分析.13 4.1 登陆界面.13 4.2 新建信息.15 4.3查询信息.16 4.4 修改信息.18 4.5 删除信息.19 4.6 添加信息.20 4.7 浏览信息.21 4.8 退出系统.21五、课程设计总结.22 5.1 主要过程总结.22 5.2 遇到的问题和解决方案.22 5.3 个人体会与收获.23六参考文献.24七、附件(源程序).24 学生信息管理系统设计一、选题背景1.1 本课题应解决的主要问题:学生信息管理系统记录了学生的学号,姓名,年龄,性别,出生年月,地址,电话,E-m
4、ail等信息。设计该程序系统,方便对学生信息进行管理。1.2 应达到的技术要求: 1.2.1登录界面,通过输入初始密码和初始学号登陆界面。 1.2.2对学生信息进行录入,建立信息文本,创建链表并储存在文件里。 1.2.3通过姓名或学号等方式进行信息查找,并以“wb”形式打开文件,输出相应信息内容。 1.2.4删除学生相关信息,采用查找节点,并删除该节点的方式。 1.2.5以“ab”追加形式打开文件,对信息进行修改或添加。 1.2.6打开信息文本,将所有信息文本内容都输出来,成功浏览信息。 1.3指导思想1.3.1 程序函数化,采用调用函数的方式,使程序条理清晰;1.3.2 函数建立后要逐个运行
5、,查找错误;1.3.3 按顺序写函数,方便程序的查看,以防缺漏。1.4、功能:登陆界面,进入主菜单,进行信息录入,按照不同方式查询成绩,修改或删除信息,浏览所有文本信息,退出系统。2、 方案论证(设计理念)2.1 设计原理 根据题目的要求,分别设计好各个功能的函数,在写好主函数,对各个函数组进行调用,从而实现系统功能的应用。2.2 方案选择 首先建立学生信息文本,实现学生信息的录入和存储;调用各个函数,应用fopen打开学生信息文本,实现对信息进行修改、添加、删除、浏览等功能。2.3 选择原因及特点介绍 该系统要实现的功能是学生信息的录入,同时能够对信息进行查询、修改、删除、添加和浏览等功能,
6、采用这个方案,主要因为符合这些功能的实现,满足课题要求,同时,该系统是在VC6.0 的开发环境下运行的,安全性强。并且该方案采用文本存储信息,防止数据丢失,能保证数据的完整性。三、过程论述3.1 数据类型说明:struct student类型用结构体储存学生信息,类型中包括:1、num(学号),char数组类型,最多输入15位数字;2、name(姓名),char数组类型,最多输入12位字母;3、sex(性别),char数组类型,最多输入4个字符;4、age(年龄),char数组类型最多输入4个字符;5、add(地址),char数组类型,最多输入16位字母;6、tel(手机),char数组类型,
7、最多输入12位数字;7、birth(出生日期),char数组类型,最多输入12位数字;8、QQ(也为电子邮箱),char数组类型,最多输入13个数字;9、指针next,struct student类型,用于存放链表下一结点的地址。并定义typedef struct student为student。3.2 函数类型说明: a. 自定义函数:delay函数类型:void参数:无功能:延时。 返回值:无create函数类型:viod参数:无功能:记录信息,按顺序输入数据,并把数据连成链表,并创建一个新的文本存储数据返回值:无search_name函数类型:void参数:fhead指针功能:按照输入的
8、姓名在文本中查找,若找到就显示信息,若找不到就显示没有该信息返回值:无Search_num函数类型:void参数:fhead指针功能:按照输入的学号在文本中查找,若找到就显示信息,若找不到就显示没有该学生的信息返回值:无change函数类型:void参数:fhead指针功能:修改信息,若要修改的学生信息存在就显示出来并进行修改,若不存在就显示没 有该学生的信息返回值:无del函数类型:void参数:fhead指针功能:删除学生信息,若要删除的学生信息存在就删除,若不存在就显示没有该学生的信息返回值:无add函数类型:void参数:无功能:增加学生信息记录返回值:无open函数类型:studen
9、t参数:void功能:打开文件,将文件里面的数据载入链表,并将链表的头指针fhead返回返回值:fheadprint函数类型:void参数:无功能:将文件里面的数据打印出来返回值:无slose函数类型:void参数:无功能:系统退出界面,延时大约2秒后自动退出程序返回值:无mainmenu函数类型:void参数:无功能:实现主菜单的显示和选择操作功能返回值:无main函数类型:void参数:无功能:程序的主函数,实现程序的功能返回值:无b.系统库函数: 函数名 头文件 功能输入输出函数 头文件stdio.h 对数据进行输入输出strcmp函数 头文件string.h 比较两字符数组是否相同sy
10、stem(”cls”) 头文件 stdlib.h 清除当前屏幕内容system(”color ”) 头文件 windows.h 改变Dos界面的背景色和前景色system("pause") 头文件 windows.h 使程序暂停system("mode con 头文件 windows.h 改变程序操作界面的大小cols=108 lines=30");getch()函数 头文件conio.h 从键盘读取一个字符c.关键变量说明 student * fphead为文件数据载入链表的链表的头指针3.3 流程图说明3.3.1主菜单流程图 登陆界面 登录成功学生信
11、息管理系统主菜单 录 入 信 息 模 块浏览信息模块 添 加 信 息 模 块退出系统模块修改信息模块查询信息模块删除信息模块按学号查询按姓名查询 开始3.3.2录入信息模块流程图 输入信息将数据写进文本是否继 续 输 入是不是按任意键回主菜单3.3.3查询信息模块流程图开始 文件不存在 读取数据文件存在输入要查询的方式“0”或“1”判断是否为“0”输出“还未建立信息”不是是判断是否为“1”输出对应学号的学生信息是输出对应姓名的学生信息返回主菜单3.3.4修改信息模块流程图开始 文件不存在 读取数据文件存在输入要修改的姓名否是否找到信息输出“还未建立信息”是输出信息无此信息 输入数据将数据写进文
12、本,并输出“修改成功”按任意键回主菜单3.3.5删除信息模块流程开始文件不存在 读取数据文件存在输入要删除的姓名否是否找到信息输出“还未建立信息”无此信息是删除数据输出“删除成功”按任意键回主菜单3.3.6添加信息模块流程开始 输入数据将数据写进文本是否继 续 输 入是否按任意键回主菜单 开始3.3.7浏览信息模块文本不存在 读取数据文本存在 输出所有信息按任意键回主菜单3.3.8退出系统模块流程图开始是否退出系统 返回主菜单否是 退出程序4、 结果分析 4.1 登陆界面。 4.1.1 只有输入正确的学号和密码才能进入主菜单进行操作。 4.1.2然后成功登陆,进入主菜单:对于程序中各个菜单的选
13、项输入时只有输入符合的编号才会执行下一步,否则待用户继续输入。(一输入即执行,不需回车) 4.1.3输入错误时会显示输入错误并在大约0.5秒后回到上面的主菜单: 4.1.4 未建立文件时,在进行查询,修改,删除,添加信息等操作时会出现如图情况,按任何键回到主菜单:4.2 新建信息 4.2.1 选定录入信息时会询问是否要录入信息; 4.2.2 确定要录入信息后,需要按照弹出的提示完成相关信息的录入;录入完成后,可以选择是否继续进行学生信息的录入:4.3查询信息 4.3.1选择查询信息后,会弹出方式选择框,需进行方式选择;若输入不是“0”或“1”时,则会自动返回主菜单:4.3.2按学号查询:若查询
14、的学号不存在,按任何键回到主菜单。学号存在时,会输出你所要查询者的相关信息:4.3.3 按姓名查询:若查询的姓名不存在,按任意键返回主菜单:学号存在时,成功将所要查询的相关信息输出:4.4 修改信息: 若学生信息文本中存有信息,会自动输出所查询人的相关信息,按照弹出的指令,对信息进行修改,修改完成后,会提示修改成功,按任意键返回主菜单:4.5 删除信息: 4.5.1.因为学生信息很重要,一删除将无法找回,所以会弹出温馨提示,是否确定要删除信息: 4.5.2 确定要删除相关信息后,弹出提示,输入想要删除的信息者姓名,如果输入姓名在学生信息库中不存在,会弹出相应提示,按任意键返回主菜单: 4.5.
15、3 输入姓名后,系统会将存在的用户信息全部删除,并提醒删除成功。4.6 添加信息 按照提示输入学生个人信息,即可将添加信息到学生信息文本中,添加成功后,按任意键返回:4.7 浏览信息: 确定浏览信息后,可以浏览所有学生信息,即将学生信息文本全部内容展示出来: 4.8 退出系统:询问是否要退出系统,确定退出后,按任意键,系统将自动关闭:五、课程设计总结5.1 主要过程总结该程序是在Visual C+ 6.0环境下运行的,编辑源程序后,在编译器中编译,根据编译器提示的错误,修改程序。其次,通过输入正确和非正确的数据,查看结果,再分析出现错误的原因并找出正确的方法,解决问题。当然,除了作业要求的模块
16、,自己还加入改变操作界面的背景色的模块,制造一定的视觉效果,而不会整个界面都是黑底白字。其次添加调节界面的大小的模块,也调用了延时函数。5.2 遇到的问题和解决方案问题一:如何才能实现获得一个字符后程序就能直接运行而不用按回车键。解决方案:通过查阅网上的资料才知道getch()函数就能实现这个功能,而且还要增加conio.h这个头文件。问题二:如何保存输入的信息。解决方案:在C程序设计书中,可以了解到,通过建立一个文件储存数据,就能解决问题。问题三:如何将屏幕清空解决方案:用system(“cls”)即可,但要增加stdlib.h这个头文件。问题四:如何修改文件中的数据解决方案:用一个链表载入
17、文件的数据,在链表中修改数据,再用“wb”的方式打开文件,并把链表里面的数据写入文件中。问题五:显示的东西太多,界面的长度不够解决方案:使用system("mode con cols=108 lines=30")函数改变程序操作界面的大小,要增加头文件windows.h 问题六:输出的数据是乱码解决方案:增大数组的长度。问题七:文件是空的时候,输出数据的结果是一堆乱码解决方案:原来文件是空的时候,文件指针指向的是一个非零地址,所以输出的是一堆乱码。把文件载入一个链表后返回链表的头指针,然后再通过头指针打印就可以解决问题,不会出现乱码了。5.3 个人体会与收获 这是我第一次做
18、程序设计,这次大作业对我来说,挺有挑战性的。毕竟,它是对上学期所学的C程序设计的总体运用,如果对C程序设计这本书的内容不熟悉的话,做大作业一定一筹莫展。所以,一开始因为许久没看C语言,很多知识都回生了,只能重新回归课本。因为侯老师说:在一开始一定要注意整体的构思。所以,在看了题目要求之后,选择了学生信息管理系统,因为对这个相对比较熟悉,题目要求的难度也不大。其实,我设计程序的顺序是按照题目的要求,将每一个要求都想出具体的解决算法。因为要求菜单的方式工作,所以我把各个功能分成七大模块,每个模块都有设计了相应的算法,根据算法,写出程序。最后,用主函数将各大模块连接起来,形成完整的源程序。然后在编译
19、器中编译、连接、执行,根据编译器的错误提示修改程序,解决问题。当符合题目要求的程序完成之后,就是进行改进,在源程序上进行其他的设计,为大作业增色。所以,我参考其他同学的设计,添加了设置背景色,延时的效果。当然,延时体现得并不很出色。其次,对功能实现方面进行改进。其实,这个作用,部分功能有点重复,比如,录入和添加信息这两个功能,并不能很好体现他们的功能特色,有点重复,但由于能力原因,我还是没办法改进的很完美。还有修改方面,不能选择性修改,需要一改全改,这个对于应用者而言,确实有点麻烦。这次大作业,其实我还有很多想法,但由于时间、能力的限制,只能尽力了。这次作业,也让我更全面地认识了C语言,对上学
20、期学的知识也有了更深刻的理解,对知识的应用也有了更深的体会。感谢侯识华老师的指导,谢谢侯老师解答我遇到的疑惑,让我顺利完成作业。六参考文献【1】谭浩强. C程序设计(第三版).北京.清华大学出版社.2010.6 【2】严蔚敏.数据结构.北京.清华大学出版社.2011.11七、附件(源程序)typedef struct studentchar num15; /学号char name12; /姓名char sex4; /性别char age4; /年龄char add16; /地址char tel12; /手机char birth12; /出生日期char QQ13; /QQstruct stud
21、ent *next;/下一个数据的地址student;#include<stdio.h> /头文件#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>#define NULL 0 /函数结果状态代码#define LEN sizeof(student) /宏定义LEN为结构体的大小void start() /登陆界面system("cls");system("color 1b");unsigned int
22、 a,b;printf(" * n");printf(" *登陆界面* n");printf(" * * n");printf(" * 华南理工大学学生信息管理系统 * n");printf(" *系统介绍* n");printf(" * 该系统用于华工学子的信息收录 * n");printf(" * 方便学校对学生信息的管理 * n");printf(" * n");printf(" * n");printf(&q
23、uot; * 请按以下操作进行登录 * n");printf(" * n");printf(" * n"); printf("请输入你的学号(初始学号是2014):n");scanf("%d",&a);while(a!=2014) printf("该学号不存在,请重新输入:"); scanf("%d",&a);printf("请输入密码(初始密码为2014):n");scanf("%d",&b);whi
24、le(b!=2014) printf("密码错误,请重新输入:"); scanf("%d",&b);void delay (unsigned int ms) /定义延时函数 unsigned int j;unsigned int z;for (z=0;z<ms;z+)for (j=0;j<11410;j+); void creat() /创建链表并储存在文件里 int m;char x='i'int n=0; FILE *fp; student *head; student *p,*q; p=q=(student *)
25、 malloc(LEN); fp=fopen("学生信息.txt","wb"); system("cls"); printf("n请输入学号并按回车键:"); scanf("%s",p->num); printf("n请输入姓名并按回车键:"); scanf("%s",p->name); printf("n请输入性别并按回车键:"); scanf("%s",p->sex); printf("
26、;n请输入年龄并按回车键:"); scanf("%s",p->age);printf("n请输入你的出生日期(如2000.1.1)并按回车键:");scanf("%s",p->birth); printf("n请输入住址(具体到市)并按回车键:"); scanf("%s",p->add); printf("n请输入手机并按回车键:"); scanf("%s",p->tel);printf("n请输入QQ并按回车键
27、:"); scanf("%s",p->QQ); fwrite(p,LEN,1,fp); /将数据写入文件 fclose(fp); head=NULL; m=1; while(m!=0) n=n+1; if(n=1) head=p; else q->next = p; q = p; p=(student *)malloc(LEN); while(x!='n'&&x!='y'&&x!='N'&&x!='Y') printf("n是否继续
28、输入信息(Y/N)"); x=getch(); switch(x) case 'y': case 'Y': fp=fopen("学生信息.txt","ab"); /以ab追加形式打开文件 system("cls"); printf("n请输入学号并按回车键:"); scanf("%s",p->num); printf("n请输入姓名并按回车键:"); scanf("%s",p->name); print
29、f("n请输入性别并按回车键:"); scanf("%s",p->sex); printf("n请输入年龄并按回车键:"); scanf("%s",p->age);printf("n请输入你的出生日期(如2000.1.1)并按回车键:");scanf("%s",p->birth); printf("n请输入住址(具体到市)并按回车键:"); scanf("%s",p->add); printf("n请输
30、入手机并按回车键:"); scanf("%s",p->tel);printf("n请输入QQ并按回车键:"); scanf("%s",p->QQ); fwrite(p,LEN,1,fp); fclose(fp); x='i'break; case 'n': case 'N':m=0; system("cls");break; q->next = 0; void search_name(student * fphead) /名字查询 stud
31、ent *p; int a=0; char name10; system("cls"); printf("请输入要查找的学生姓名并按回车键:n"); scanf("%s",name); for(p=fphead->next;p!=NULL;p=p->next) if(strcmp(p->name,name)=0) printf(" _n"); printf(" | 学号 | 姓名 | 性别 | 年龄 | 出生日期 | 住址 | 手机 | e-mail |nn"); printf
32、(" | %12s | %-10s| %s | %2s |%11s|%14s| %-11s | %10s |n",p->num,p->name,p->sex,p->age,p->birth,p->add,p->tel,p->QQ); printf(" _n"); a=1; if(a!=1) printf("无此学生的信息!n"); system("pause"); void search_num(student * fphead) /学号查询 student *p;
33、int a=0; char num15; system("cls"); printf("请输入要查找的学生学号并按回车键:n"); scanf("%s",num); for(p=fphead->next;p!=NULL;p=p->next) if(strcmp(p->num,num)=0) printf(" -n"); printf(" | 学号 | 姓名 | 性别 | 年龄 | 出生日期 | 住址 | 手机 | QQ |n");printf(" -n");
34、 printf(" | %12s | %-10s| %s | %2s |%11s|%14s| %-11s | %10s |n",p->num,p->name,p->sex,p->age,p->birth,p->add,p->tel,p->QQ); printf(" -n"); a=1; if(a!=1) printf("无此学生的信息!n"); system("pause");void change(student *fphead) /修改信息 FILE *fp; s
35、tudent *p,*q; int a=0; char change12; system("cls"); printf("请输入要修改的姓名:n"); scanf("%s",change); for(p=fphead->next;p!=NULL;p=p->next) if(strcmp(p->name,change)=0) printf(" -n"); printf(" | 学号 | 姓名 | 性别 | 年龄 | 出生日期 | 住址 | 手机 | QQ |n");printf(
36、" -n"); printf(" | %12s | %-10s| %s | %2s |%11s|%14s| %-11s | %10s |n",p->num,p->name,p->sex,p->age,p->birth,p->add,p->tel,p->QQ); printf(" -n"); printf("n请输入新学号并按回车键:"); scanf("%s",p->num); printf("n请输入新姓名并按回车键:"
37、); scanf("%s",p->name); printf("n请输入性别并按回车键:"); scanf("%s",p->sex); printf("n请输入年龄并按回车键:"); scanf("%s",p->age);printf("n请输入你的出生日期(如2000.1.1)并按回车键:");scanf("%s",p->birth); printf("n请输入新住址(如具体到市)并按回车键:"); scanf
38、("%s",p->add); printf("n请输入新手机并按回车键:"); scanf("%s",p->tel);printf("n请输入新QQ并按回车键:"); scanf("%s",p->QQ); fp=fopen("学生信息.txt","wb"); q=fphead->next; while(q!=0) fwrite(q,LEN,1,fp); if(q->next!=0) q=q->next; else q=0
39、; fclose(fp); printf("修改成功!"); a=1; if(a!=1) printf("n无此学生信息!n"); void del(student *fphead) /删除数据 FILE *fp; student *p,*q,*r; char delname12; p=(student *) malloc(LEN); p=fphead; system("cls"); fp=fopen("学生信息.txt","wb"); printf("请输入要删除记录的姓名:&quo
40、t;); scanf("%s",delname); while(strcmp(p->name,delname)!=0&&p->next!=0) q=p; p=p->next; if(strcmp(p->name,delname)=0) if(p=fphead) fphead=p->next; else q->next = p->next; r=fphead->next; while(r!=0) fwrite(r,LEN,1,fp); if(r->next!=0) r=r->next; else r
41、= 0; printf("n删除成功n"); else printf("n抱歉,您所查找的用户不存在,请重新输入!n"); r=fphead->next; while(r!=0) fwrite(r,LEN,1,fp); if(r->next!=0) r=r->next; else r = 0; fclose(fp); void add() /增添信息 int m;char x='i'int n=0; FILE *fp; student *head; student *p,*q; p=q=(student *) malloc(LEN); fp=fopen("学生信息.txt","ab"); system("cls"); printf("n请输入学号并按回车键:"); scanf("%s",p->num); printf("n请输入姓名并按回车键:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度夹板产品线上线下销售合作协议4篇
- 二零二五年度民爆工程项目安全教育培训合同4篇
- 2025年度抖音平台内容创作者收益分成合同3篇
- 2025年度草原生态环境损害赔偿与修复合同3篇
- 2025版高速公路桥梁锚杆锚锁维护保养工程合同4篇
- 个人独资企业清算协议书(2024版)
- 二零二五苗木种植基地建设与管理承包合同4篇
- 二零二五年度杭州房屋租赁市场租赁合同修改与补充服务协议3篇
- 生物安全实验室建设与改造策略
- 教育科技对学生德业教育与心理健康的双重影响
- 2025年安庆港华燃气限公司招聘工作人员14人高频重点提升(共500题)附带答案详解
- 人教版(2025新版)七年级下册数学第七章 相交线与平行线 单元测试卷(含答案)
- GB/T 44351-2024退化林修复技术规程
- 从跨文化交际的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中药饮片培训课件
- 医院护理培训课件:《早产儿姿势管理与摆位》
- 空气自动站仪器运营维护项目操作说明以及简单故障处理
- 2022年12月Python-一级等级考试真题(附答案-解析)
- T-CHSA 020-2023 上颌骨缺损手术功能修复重建的专家共识
- Hypermesh lsdyna转动副连接课件完整版
- 小学六年级数学计算题100道(含答案)
评论
0/150
提交评论