学生信息管理系统设计.docx
- 文档编号:29476335
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:29
- 大小:376.05KB
学生信息管理系统设计.docx
《学生信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统设计.docx(29页珍藏版)》请在冰豆网上搜索。
学生信息管理系统设计
专业综合设计报告书
设计名称:
学生姓名:
专业:
班别:
学号:
指导老师:
日期:
年月日
综合设计名称
学生信息管理系统设计
相关课程
C语言程序设计
完成时间
2016年12月19日
成
绩
评
定
序号
评分项名称
评分标准
得分
1
设计功能概述
全面准确说明设计功能:
10分;全面说明设计功能:
8分;简要说明设计功能:
6分;功能与设计名称无关:
5分以下。
2
设计依据及原理
设计依据符合课程要求、原理,并具有现实意义:
20分;设计依据符合课程要求、原理:
16分;设计依据符合课程要求:
12分;设计依据与课程无关:
10分以下。
3
设计体系结构
完整表达设计的结构,灵活应用图表等形式:
30分;使用文本表达设计的结构:
24分;设计结构基本完成:
18分;体系结构与课程设计无关:
15分以下。
4
设计与运行
代码与设计步骤清晰,运行成功:
30分;完成功能设计,运行成功:
24分;设计功能符合要求,运行有问题:
20分;设计功能不全,代码出错,不能正常编译和运行:
15分以下。
5
小结
表达清楚,实事求是,符合课程要求:
10分;表达清楚,符合课程要求:
8分;符合课程要求:
6分;表达不清楚,不符合课程要求:
5分以下。
总分
等级
评分人
备注:
成绩分为优秀、良好,中等、合格和不合格五个等级
1.设计功能概述
学生信息管理系统,是一个可以增加、删除、浏览、查看、修改学生信息的系统,它是利用C语言实现各功能的。
其中学生信息包括:
学号、姓名、年龄、电话号码、性别、出生年月、QQ、班级等。
该系统可提供添加学生信息、查询学生信息(可以按学号查询和按姓名查询)、删除学生信息(可以按学号删除和按姓名删除)、学生信息修改(可逐项修改学生信息)、学生信息整表浏览等功能。
2.设计依据及原理
2.1设计分析
2.1.1系统总体设计
2.1.2详细分析
1)入口函数说明
menu();菜单函数
load_info();载入函数:
txt转为链表
add_info(STU*h);增加学生
search_info(STU*h,inttype);搜索函数
delete_info(STU*h);删除学生
update_info(STU*h);修改学生信息
output_info(STU*h);输出信息
preview_info(STU*h,inttype);预览信息
main();主函数
2)调用关系
3)参数说明
add_info(STU*h)、delete_info(STU*h)、output_info(STU*h)、preview_info(STU*h,inttype)、search_info(STU*h,inttype)、update_info(STU*h)函数中的STU*h为传入的链表节点指针,type为搜索的方式:
1为输出传入节点指针的一条学生记录,2为输出所有的学生记录。
2.2课程设计原理
根据总体设计的框架,利用C语言逐项实现各个功能。
首先将该系统需要的函数框架罗列出来,然后根据功能要求逐一将各个功能实现,并实现main函数的所有调用,每实现一个功能都进行一次测试,确保将发现的错误在单个功能编写的时候就能解决,以免影响整体效果。
最后是整体运行调试。
以下是整个系统的设计思路,和运行流程:
1)运行程序,显示菜单页面,包括适当的提示信息以及可以实现的各项功能。
用户选择输入各功能对应的数字,进入下一级功能页面;
2)根据所输入的功能对应的数字,调用对应的各模块函数,显示相应的提示信息令用户进行下一步操
作;
3)根据用户的输入数据计算或判断,显示出相应的结果以及相应的提示信息,提醒用户进行下一步操作;
4)根据选择菜单上对应的功能,可能跳转到添加学生信息、修改学生信息、删除学生信息、浏览学生信息等页面,每结束一个动作,都可以按照选择进行下一个动作;
5)当用户选择“0”时,都会结束进程,并关闭系统。
3.设计体系结构
3.1设计目标
该系统的目的主要是加强对学生信息的管理,便于学校对学生信息的统一管理。
其中该系统包括以下功能:
初始化基本信息界面,即主菜单,有独立的添加与修改界面。
添加界面只能连续添加相应的信息,修改界面只能逐项修改学生的信息。
删除信息和查询信息都可以通过按学号和按姓名查询和删除,可通过浏览整表浏览所有存在的学生信息表。
3.2体系功能结构图
4.设计与运行
4.1调试与测试
以下是在调试与测试中遇到的一些问题及解决方法
1)调用STU*load_info()函数(文件载入),读写出现乱码
解决方法:
更改相应指针指向,及有关变量的初值设置。
2)边界测试
解决方法:
用极端的或偏门的情况来探测和验证代码在处理时会发生什么。
3)执行窗口执行多次命令后显示过多,不利于输入指令及结果查看
解决方法:
调用系统清屏函数system("cls");。
4)学生信息输出时分不清界限。
解决方法:
在学生信息输出结果时,使分割线,使的输出信息对齐。
4.2运行结果
(1)显示主菜单,调用了main()函数,通过输入命令编号继续程序的执行。
(2)输入“1”,即添加学生信息,调用add_info(STU*h);
(3)按名字查找学生,调用search_info(STU*h,inttype)case2;
查找结果
(4)按学号查找学生,调用search_info(STU*h,inttype)case1;
查找结果
(5)浏览全部学生信息,调用preview_info(STU*h,inttype);
(5)按学号删除学生信息,调用delete_info(STU*h);
删除成功
(6)先按学号查询需要修改信息的学生,再修改需要修改的信息,先调用search_info(h,1),再调用update_info(STU*h);
修改成功,并用system("cls")清屏。
5.小结
在这次系统设计中,我花了比较长的一段时间学习和编写代码,当然也参考了一些资料。
毕竟大一的时候学的C语言是比较基础的,也没那么深入的学习。
这次实践的结果,不仅实现了学生管理系统的基本功能,即简洁的菜单以及操作使用户能在最短的时间内实现自己想要实现的功能,基本达到了预期目标,而且使我加深了对文件、指针、结构体等的理解,又积累了一些实践经验,同时增强了动手能力和解决实际问题的能力。
在设计此系统之前,我的C语言编程能力是比较差的,动手能力十分欠缺,每次都会害怕动手。
通过此次程序设计,使我基本了解了C程序设计的步骤,如结构流程图,功能模块分类等等,特别是学会设计系统的基本步骤及思维方法。
这次实践增强了我动手编程的信心,同时让我对代码的编辑更加自信。
我相信机会都是留给有准备的人,我会更加深入学习相关的知识,不断提高自我的知识能力,迎接未来的挑战。
6.附件(源代码)
#include
#include
#include
typedefstructrecord{//学生信息结构体
charNo[10];
charname[12];
unsignedintage;
charsex[4];
charbirth[10];
charqq[12];
chargrade[20];
charphone[11];
structrecord*next;
}STU;
intmenu();//菜单函数
STU*load_info();//载入函数:
txt转为链表
STU*add_info(STU*h);//增加学生
STU*search_info(STU*h,inttype);//搜索函数
STU*delete_info(STU*h);//删除学生
voidupdate_info(STU*h);//修改学生信息
voidoutput_info(STU*h);//输出信息
voidpreview_info(STU*h,inttype);//预览信息
voidmain()
{
STU*header=NULL,*sear=NULL;intcmd=1;
system("title学生信息管理系统");
system("date/T");
system("TIME/T");
system("color5E");
header=load_info();
cmd=menu();//菜单选项设置
while(cmd!
=0)
{
switch(cmd)
{
case0:
break;
case1:
//添加信息
header=add_info(header);output_info(header);
break;
case2:
//学号查询
sear=search_info(header,1);
if(sear!
=NULL)
{
preview_info(sear,1);
}
else
printf("该学生不存在!
\n");
sear=NULL;
break;
case3:
//姓名查询
sear=search_info(header,2);
if(sear!
=NULL)
{
preview_info(sear,1);
}
else
printf("该学生不存在!
\n");
sear=NULL;
break;
case4:
//按学号删除
header=delete_info(header);
output_info(header);
break;
case5:
//修改
update_info(header);
output_info(header);
break;
case6:
//整表输出
preview_info(header,2);
break;
default:
//命令无效
printf("无效的命令!
\n请重新输入命令!
\n");
break;
}
if(cmd!
=0)
cmd=menu();
}
}
intmenu()
{
intcmd=0;
printf("\n请输入命令:
\n\t0:
结束程序!
\n\t1:
添加学生!
\n\t2:
按学号查询!
\n\t3:
按姓名查询!
\n\t4:
按学号删除信息!
\n\t5:
按学号修改信息!
\n\t6:
整表浏览!
\n");
scanf("%d",&cmd);
while(cmd<0||cmd>9)
{
printf("无效的命令!
\n请重新输入:
\n");
scanf("%d",&cmd);
}
returncmd;
}
STU*load_info()//载入函数:
txt转为链表
{
FILE*fp=fopen("d:
\\stu.txt","r+"),*fpNew=NULL;
STU*h=NULL,*q=NULL,*p=NULL;charch='0';
h=(STU*)malloc(sizeof(STU));
if(fp==NULL)
{
fpNew=fopen("d:
\\stu.txt","w");
fclose(fpNew);
returnNULL;
}
rewind(fp);
ch=fgetc(fp);
if(ch==EOF)
{
returnNULL;
}
else
{
rewind(fp);
fscanf(fp,"%10s%12s%3d%11s%4s%10s%12s%20s",h->No,h->name,&h->age,h->phone,h->sex,h->birth,h->qq,h->grade);
q=h;
q->next=NULL;
}
ch=fgetc(fp);
while(ch!
=EOF)
{
p=(STU*)malloc(sizeof(STU));
p->next=NULL;
fscanf(fp,"%10s%12s%3d%11s%4s%10s%12s%20s",p->No,p->name,&p->age,p->phone,p->sex,p->birth,p->qq,p->grade);
ch=fgetc(fp);
q->next=p;
q=q->next;
}
fclose(fp);
returnh;
}
STU*add_info(STU*h)//增加学生信息
{
FILE*fpin=fopen("d:
\\stu.txt","a");
STU*stu,*p;
p=h;
stu=(STU*)malloc(sizeof(STU));
stu->next=NULL;
system("cls");
if(h==NULL)
{
h=stu;
printf("请输入学号:
\n");
scanf("%s",h->No);
printf("请输入姓名:
\n");
scanf("%s",h->name);
printf("请输入年龄:
\n");
scanf("%d",&h->age);
printf("请输入手机号:
\n");
scanf("%s",h->phone);
printf("请输入性别:
\n");
scanf("%s",h->sex);
printf("请输入出生年月日:
\n");
scanf("%s",h->birth);
printf("请输入qq:
\n");
scanf("%s",h->qq);
printf("请输入班级:
\n");
scanf("%s",h->grade);
}
else
{
while(p->next!
=NULL)
{
p=p->next;
}
p->next=stu;
printf("请输入学号:
\n");
scanf("%s",stu->No);
printf("请输入姓名:
\n");
scanf("%s",stu->name);
printf("请输入年龄:
\n");
scanf("%d",&stu->age);
printf("请输入手机号:
\n");
scanf("%s",stu->phone);
printf("请输入性别:
\n");
scanf("%s",stu->sex);
printf("请输入出生年月日:
\n");
scanf("%s",stu->birth);
printf("请输入qq:
\n");
scanf("%s",stu->qq);
printf("请输入班级:
\n");
scanf("%s",stu->grade);
}
fclose(fpin);
returnh;
}
STU*delete_info(STU*h)//删除学生信息
{
STU*p,*q;
charno[11];
p=h;
if(p==NULL)
{
printf("\t目前还没有信息记录!
\n");
returnNULL;
}
else
{
printf("请输入一个学号:
\n");
scanf("%s",no);
q=p->next;
if(strcmp(h->No,no)==0)
{
printf("该学生信息已删除!
\n");
h=h->next;
}
else
{
while(q!
=NULL)
{
if(strcmp(q->No,no)==0)
{
printf("\t该学生的信息已删除!
\n");
p->next=q->next;
returnh;
}
else
{
p=q;
q=q->next;
}
}
printf("该学生不存在!
\n");
}
returnh;
}
}
STU*search_info(STU*h,inttype)//按条件搜索学生信息
{
STU*p_temp=NULL,*q=h;
p_temp=(STU*)malloc(sizeof(STU));
system("cls");
switch(type)
{
case1:
//按学号查询
printf("\t请输入一个学号:
\n\t");
scanf("%s",p_temp->No);
while(q!
=NULL)
{
if(strcmp(q->No,p_temp->No)==0)
returnq;
else
q=q->next;
}
returnNULL;
break;
case2:
//按姓名查询
printf("\t请输入一个名字:
\n\t");
scanf("%s",p_temp->name);
while(q!
=NULL)
{
if(strcmp(q->name,p_temp->name)==0)
returnq;
else
q=q->next;
}
returnNULL;
break;
default:
returnNULL;break;
}
}
voidupdate_info(STU*h)//修改学生信息
{
STU*q=NULL;
unsignedintcmd=1,rec=1;
system("cls");
while(rec!
=0)
{
q=search_info(h,1);
if(q==NULL)
printf("\t该学生不存在,无法进行修改操作!
\n");
else
{
cmd=1;
while(cmd!
=0)
{
system("cls");
preview_info(q,1);
printf("\n\t0:
修改完成,回主菜单!
\n\t1:
修改该学生姓名!
\n\t2:
修改该学生年龄!
\n\t3:
修改该学生手机号!
\n\t4:
修改该学生性别!
\n\t5:
修改该学生生日!
\n\t6:
修改该学生qq号!
\n\t7:
修改该学生班级!
\n\t8:
修改下一个!
\n");
printf("请输入命令:
\n\t");
scanf("%d",&cmd);
switch(cmd)
{
case0:
cmd=0;rec=0;break;
case1:
printf("\t请输入学生新的姓名:
\n\t");
scanf("%s",q->name);
break;
case2:
printf("\t请输入学生新的年龄:
\n\t");
scanf("%d",&q->age);
break;
case3:
printf("\t请输入学生新的手机号:
\n\t");
scanf("%s",q->phone);
break;
case4:
printf("\t请输入学生新的性别:
\n\t");
scanf("%s",q->sex);
break;
case5:
printf("\t请输入学生新的生日:
\n\t");
scanf("%s",q->birth);
break;
case6:
printf("\t请输入学生新的qq号:
\n\t");
scanf("%s",q->qq);
break;
case7:
printf("\t请输入学生新的班级:
\n\t");
scanf("%s",q->grade);
break;
case8:
cmd=0;
break;
}
}
}
}
}
voidoutput_info(STU*h)//输出学生信息
{
FILE*fpin=fopen("d:
\\stu.txt","w");
STU*q=NULL;
q=h;
if(q!
=NULL)
{
fprintf(fpin,"%-10s%-12s%4d%11s%-4s%-8s%-11s%20s",q->No,q->name,q->age,q->phone,q->sex,q->birth,q->qq,q->grade);
q=q->next;
}
while(NULL!
=q)
{
fprintf(fpin,"\n%-10s%-12s%4d%11s%-4s%-8s%-11s%20s",q->No,q->name,q->age,q->phone,q->sex,q->birth,q->qq,q->grade);
q=q->next;
}
fclose(fpin);
}
voidpreview_info(STU*h,inttype)//浏览学生信息
{
STU*p=NULL;
p=h;
system("cls");
switch(type)
{
case1:
printf("=================================");
printf("\n该学生的完整信息为:
\n\t学号:
%-10s\n\t姓名:
%-12s\n\t年龄:
%-4d\n\t电话:
%-11s\n\t性别:
%-4s\n\t生日:
%-s\t\n\tQQ号:
%s\t\n\t班级:
%-s\n",h->No,h->name,h->age,h->phone,h->sex,h->birth,h->qq,h->grade);
printf("=================================");
break;
case2:
if(p==NULL)
{
printf("文件中没有信息!
\n");
break;
}
printf("============================
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 设计