c语言课设学生信息管理系统.docx
- 文档编号:3153396
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:38
- 大小:592.99KB
c语言课设学生信息管理系统.docx
《c语言课设学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课设学生信息管理系统.docx(38页珍藏版)》请在冰点文库上搜索。
c语言课设学生信息管理系统
沈阳航空航天大学
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
学生信息管理系统的设计与实现
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
完成日期:
第1章概要设计
1.1题目的内容与要求
课程设计的内容是设计一个简单的单词替换程序,可以替换文本文件中指定的单词。
要求:
(1)输入信息要包括学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
(2)通过菜单进行信息的录入,查询,修改,删除等等功能。
(3)查询模块要分别用两种方式查询,学号查询,姓名查询。
(4)文件保存到文本中。
(5)采用VC环境进行调试运行。
1.2总体结构
本程序主要分为8个模块(功能模块图见图1.1):
1.主模块,主要显示系统菜单,并且读取所选功能选项。
2.信息录入模块,对学生信息进行录入。
3.信息插入模块,从所有数据中的任一位置插入学生的信息。
4.信息查询模块,对学生的信息进行查询,分两种方式:
学号查询,姓名查询。
5.信息浏览模块,将所有学生的信息逐个显示出。
6.信息删除模块,将指定信息删除。
7.信息修改模块,修改指定信息。
8.学生人数统计模块,统计当前所存储的数据条数。
图1.1功能模块图
第2章详细设计
2.1主模块
控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,主要应用循环和switch语句,流程如图2.1所示。
图2.1主模块流程图
注释:
本流程图主要实现了一个switch语句,合法数据域为0~7,输入0则退出,在流程图上没有0是因为数值合法且数值不为1~7的时候即为0。
2.2学生信息录入模块(input函数)
输入要输入的学生信息,可以显示已保存的学生信息内容,并将内容输出,若内容为空,将提示是否录入数据,直到选择不继续,就回到主菜单,主要流程如图2.2所示。
注释:
1.学号为字符串
2.直到输入不继续才会结束。
3.结束为回主菜单,而不是结束程序
图2.2显示模块流程图
2.3信息插入模块
插入新信息,主要将信息插入任意处,其余信息依次下移一条。
不能覆盖某一条信息,而是顺序下移。
主要流程如图2.3所示。
图2.3信息插入模块流程图
注释:
1.检测重复时会将所输入的学号跳过,对之前存在数据进行检测。
2.若没有数据,则会显示无数据并直接退回到主菜单。
2.4信息查询模块
本模块分为两种查询方式,实际上操作方式是相同的,姓名和学号均为字符串形式,主要流程如图2.4所示。
图2.4信息查询模块流程图
注释:
1.学号与学生姓名均为字符串
2.程序中会显示选项,流程图中没有表示。
2.5信息浏览模块
可以将所有已保存信息信息显示到屏幕上,计划是将其作为一个单独函数,然后突然发现该模块可以和信息插入模块联系到一起,并且可以更好地实现两个模块的功能,如果没有数据,则调用信息录入模块录入新信息,若有数据则直接显示出来,主要是将文件中的内容读取到屏幕上。
并且在信息录入时可以显示出已有信息。
2.6信息删除模块
可以删除指定学生的信息,通过学号查找来查找删除目标,在打开文件后会判定是否有数据,可以在删除时确定是否删除。
主要流程如图2.5所示。
图2.5信息删除模块流程图
注释:
1.删除后被删除项之后的数据依次向上移动
2.数据总个数会减一
2.7信息修改模块
可以修改指定学生的信息,通过学号查找来查找修改目标,在打开文件后会判定是否有数据,可以在修改时确定是否修改。
主要流程如图2.6所示。
图2.6信息修改模块统计图
注释:
1.修改时其余数据不会变化
2.8学生人数统计模块
统计数据条数,即学生人数,主要就是应用每条数据所占总长度是固定的,检测共有多少条。
第3章调试分析
1.对主函数进行调试
图为菜单
2.第一次数据录入
3.第二次录入出现问题
图中上部表头不能对齐,通过一次次对show函数中显示内容进行修改,最终正确对齐。
已改正
4.对信息浏览模块的检测
出现问题,出现多余信息。
改正后测试时屏幕一闪而过,但已观测到问题已改正。
5.删除模块出现问题
删除前:
删除:
删除后:
错误的删除了内容。
经仔细查看代码发现将学号的形式错误的定义成整形,已改正,图为改正结果,删除功能完全正常,如下图。
第4章使用说明与执行结果
运行操作及结果:
主界面,输入数字进行操作。
输入1并选择录入新信息,即输入y。
输入学生的个人信息即可。
输入完成,可以选择继续输入或退出。
选择n即回到主菜单界面。
输入2进入信息插入系统,
输入插入位置。
输入插入的信息
插入成功,按任意键返回主菜单。
输入3进入查询系统
可以分别进行学号查找和姓名查找
学号查找
姓名查找
输入4进入学生信息浏览系统,将显示所有已录入学生信息
按任意键返回主菜单
输入5进入学生信息删除界面
通过学号查找方式进行删除
删除后可以输入4确认是否删除
输入6可以进入信息修改界面
查找方式为学号查找
修改完成。
输入7会统计保存的数据有多少条。
输入0退出系统
参考文献
[1]IvorHorton.C语言入门经典(第五版).清华大学出版社,2013
[2]刘艳伟.C函数全能速查宝典.人民邮电出版社,2012
[3]戴艳.零基础学算法(第三版).机械工业出版社,2014
[4]郭旭文.C语言程序设计与项目实践.电子工业出版社,2011
[5]王敬华.C语言程序设计教程(第二版).清华大学出版社,2009
附录(程序清单)
程序源代码:
#include
#include
#include
#defineLENsizeof(structstudent)
#defineFORMAT"%-15s%-10s%-6d%-7s%-13s%-16s%-12s\n"
#defineALLstu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birth,stu[i].address,stu[i].tel
structstudent//定义学生成绩结构体
{
charnum[15];//学号
charname[10];//姓名
intage;//年龄
charsex[7];//性别
charbirth[13];//出生年月
charaddress[16];//地址
chartel[12];//电话
};
structstudentstu[50];
voidinput();//学生信息录入系统
voidshow();//学生信息浏览系统
voidinsert();//学生信息插入系统
voidsearch();//学生信息查询系统
voiddel();//学生信息删除系统
voidmodify();//学生信息修改系统
voidall();//学生人数统计模块
intmain()
{
intnum=0;
while
(1)
{
//系统菜单界面
printf("\t|---------------学生信息管理系统---------------|\n");
printf("\t|0.退出|\n");
printf("\t|1.学生信息录入|\n");
printf("\t|2.学生信息插入|\n");
printf("\t|3.学生信息查询|\n");
printf("\t|4.学生信息浏览|\n");
printf("\t|5.学生信息删除|\n");
printf("\t|6.学生信息修改|\n");
printf("\t|7.学生人数统计|\n");
printf("\t|----------------------------------------------|\n");
printf("\t请输入数字0~7:
");
scanf("%d",&num);
while(num>7||num<0)//判断输入是否合理
{
printf("\t输入错误,请重新输入:
");
scanf("%d",&num);
}
switch(num)
{
case1:
input();
system("cls");//清屏
break;
case2:
insert();
system("pause");
system("cls");
break;
case3:
search();
system("pause");
system("cls");
break;
case4:
show();
system("cls");//清屏
break;
case5:
del();
system("pause");
system("cls");
break;
case6:
modify();
system("pause");
system("cls");
break;
case7:
all();
system("pause");
system("cls");
break;
case0:
printf("\t退出系统\n");
return0;
}
}
}
voidinput()//学生信息录入系统
{
inti,m=0;//m是记录的条数
charch[2];
FILE*fp;
if((fp=fopen("data.txt","a+"))==NULL)//打开指定文件
{
printf("文件无法打开\n");
return;
}
while(!
feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;//统计当前记录条数
}
fclose(fp);
if(m==0)
printf("没有数据\n");
else
{
system("cls");//清屏
show();//显示原有信息
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件无法打开\n");
return;
}
for(i=0;i fwrite(&stu[i],LEN,1,fp);//向指定的文件写入信息 printf("是否录入新信息(是: y/否: n): "); scanf("%s",ch); while(strcmp(ch,"y")==0)//判断是否要录入新信息 { printf("学号: "); scanf("%s",&stu[m].num);//输入学生学号 for(i=0;i if(strcmp(stu[i].num,stu[m].num)==0) { printf("该学号已存在,请按任意键继续! \n"); getch(); fclose(fp); return; } printf("姓名: "); scanf("%s",stu[m].name);//输入学生姓名 printf("年龄: "); scanf("%d",&stu[m].age);//输入年龄 printf("性别: "); scanf("%s",&stu[m].sex);//输入性别 printf("出生年月: "); scanf("%s",&stu[m].birth);//输入出生年月 printf("地址: "); scanf("%s",&stu[m].address);//输入地址 printf("电话: "); scanf("%s",&stu[m].tel);//输入电话 if(fwrite(&stu[m],LEN,1,fp)! =1)//将新录入的信息写入指定的磁盘文件 { printf("无法保存"); getch(); } else { printf("%s已保存\n",stu[m].name); m++; } printf("是否继续(是: y/否: n): ");//询问是否继续 scanf("%s",ch); } fclose(fp); printf("\t完成\n"); } voidshow()//学生信息浏览系统 { FILE*fp; inti,m=0; fp=fopen("data.txt","rb"); while(! feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1) m++; } if(m==0) { input(); return; } fclose(fp); printf("学号姓名年龄性别出生年月地址电话\t\n"); for(i=0;i { printf(FORMAT,ALL);//将信息按指定格式打印 } system("pause"); } voidinsert()//学生信息插入系统 { FILE*fp; inti,j,k,m=0; charsnum[15]; if((fp=fopen("data.txt","r+"))==NULL) { printf("无法打开\n"); return; } while(! feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("没有数据\n"); fclose(fp); return; } printf("请输入插入的位置\n"); scanf("%s",&snum);//输入要插入的位置 for(i=0;i if(strcmp(snum,stu[i].num)==0) break; for(j=m-1;j>i;j--) stu[j+1]=stu[j];//从最后一条记录开始均向后移一位 printf("请输入插入的学号\n"); printf("学号: "); scanf("%s",&stu[i+1].num); for(k=0;k { if(k==(i+1)) continue; if(strcmp(stu[k].num,stu[i+1].num)==0) { printf("该学生已存在\n"); getch(); fclose(fp); return; } } printf("姓名: "); scanf("%s",stu[i+1].name);//输入学生姓名 printf("年龄: "); scanf("%d",&stu[i+1].age);//输入年龄 printf("性别: "); scanf("%s",&stu[i+1].sex);//输入性别 printf("出生年月: "); scanf("%s",&stu[i+1].birth);//输入出生年月 printf("地址: "); scanf("%s",&stu[i+1].address);//输入地址 printf("电话: "); scanf("%s",&stu[i+1].tel);//输入电话 if((fp=fopen("data.txt","wb"))==NULL) { printf("无法打开\n"); return; } for(k=0;k<=m;k++) if(fwrite(&stu[k],LEN,1,fp)! =1)//将修改后的记录写入磁盘文件中 { printf("无法保存"); getch(); } fclose(fp); } voidsearch()//学生信息查询系统 { FILE*fp; inti,m=0,sear; charch[2]; charsnum[15]; charsname[10]; if((fp=fopen("data.txt","rb"))==NULL) { printf("文件无法打开\n"); return; } while(! feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有数据\n"); return; } printf("\t1.学号查找\n"); printf("\t2.姓名查找\n"); printf("\t请选择查找方式: "); scanf("%d",&sear); if(sear==1) { printf("请输入学号\n"); scanf("%s",&snum); for(i=0;i if(strcmp(snum,stu[i].num)==0)//查找输入的学号是否在记录中 { printf("发现该同学信息,是否显示(是: y/否: n): "); scanf("%s",ch); if(strcmp(ch,"y")==0) { printf("学号姓名年龄性别出生年月地址电话\t\n"); printf(FORMAT,ALL);//将查找出的结果按指定格式输出 break; } else return; } if(i==m) printf("没有找到该学生\n");//未找到要查找的信息 } elseif(sear==2) { printf("请输入姓名\n"); scanf("%s",&sname); for(i=0;i if(strcmp(sname,stu[i].name)==0)//查找输入的学号是否在记录中 { printf("发现该同学信息,是否显示(是: y/否: n): "); scanf("%s",ch); if(strcmp(ch,"y")==0) { printf("学号姓名年龄性别出生年月地址电话\t\n"); printf(FORMAT,ALL);//将查找出的结果按指定格式输出 break; } else return; } if(i==m) printf("没有找到该学生\n");//未找到要查找的信息 } else printf("输入错误\n"); } voiddel()//学生信息删除系统 { FILE*fp; inti,j,m=0; charsnum[15]; charch[2]; if((fp=fopen("data.txt","r+"))==NULL) { printf("无法打开\n"); return; } while(! feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有数据\n"); return; } printf("请输入学号: "); scanf("%s",&snum); for(i=0;i if(strcmp(snum,stu[i].num)==0) break; if(i==m) { printf("无此学生信息\n"); return; } printf("发现该学生信息,是否删除(是: y/否: n): "); scanf("%s",ch); if(strcmp(ch,"y")==0)//判断是否要进行删除 { for(j=i;j stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置 m--;//记录的总个数减1 if((fp=fopen("data.txt","wb"))==NULL) { printf("无法打开\n"); return; } for(j=0;j if(fwrite(&stu[j],LEN,1,fp)! =1) { printf("无法保存\n"); getch(); } fclose(fp); printf("删除成功\n"); } else return; } voidmodify()//学生信息修改系统 { FILE*fp; inti,j,m=0; charch[2]; charsnum[15]; if((fp=fopen("data.txt","r+"))==NULL) { printf("无法打开\n"); return; } while(! feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("没有数据\n"); fclose(fp); return; } printf("请输入要修改的信息的学生学号\n"); scanf("%s",&snum); for(i=0;i if(strcmp(snum,stu[i].num)==0)//检索记录中是否有要修改的信息 break; if(i==m) { printf("无此学生信息\n"); return; } printf("发现该学生,是否修改(是y/否n): \n"); scanf("%s",ch); if(strcmp(ch,"y")==0)//判断是否要进行删除 { printf("姓名: "); scanf("%s",stu[i].name);//输入学生姓名 printf("年龄: "); scanf("%d",&stu[i].age);//输入年龄 printf("性别: "); scanf("%s",&stu[i].sex);//输入性别 printf("出生年月: "); scanf("%s",&stu[i].birth);//输入出生年月 printf("地址: "); scanf("%s",&stu[i].address);//输入地址 printf("电话: "); scanf("%s",&stu[i].tel);//输入电话 } else ret
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 信息管理 系统