学生信息管理系统课程设计实验报告.docx
《学生信息管理系统课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统课程设计实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
学生信息管理系统课程设计实验报告
*********大学
课程设计报告
课程名称高级语言程序设计
设计题目学生信息管理系统
专业计算机科学与技术
班级
学号
姓名
完成日期
课程设计任务书
设计题目:
学生信息管理系统设计
设计内容与要求:
内容:
对学生信息进行管理,学生信息包括学号、姓名、性别、年龄、学历、学号、住址、电话等(学号不重复)。
要求:
(1)系统以菜单方式工作
(2)学生信息录入功能(学生信息用文件保存)。
(3)输出学生信息、浏览学生信息功能。
(4)查询和排序功能:
(至少一种查询方式),如按学号查询、按学历查询等。
(5)学生信息删除、修改功能(任选项)。
指导教师:
_______________
年月日
课程设计评语
成绩:
指导教师:
_______________
年月日
【问题描述】
学生信息管理软件设计。
对学生信息进行管理,学生信息包括:
学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
试设计一个学生信息管理软件。
【基本要求】
一、输入的形式和输入值的范围
形式:
用scanf输入学生的学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。
输入一个学生信息一个回车。
用输入的学号p1->num来控制输入,当输入的学号为0时,用break跳出循环。
即if(p1->num==0)break。
输入值的范围:
学号、年龄为整型longnum;intage;
姓名为字符串型15个字节charname[15];
性别为字符串型,10个字节charsex[10];
出生为字符串型,20个字节charchushen[20];
地址为字符串型,30个字节chardizhi[30];
邮箱为字符串型,输入11位数字charemail[11]。
二、输出的形式
输出是以表格的形式输出,即表格的每一行都能显示第一个学生的信息,第二行是显示第二个学生的信息。
三、程序所能达到的功能
对学生信息进行管理,学生信息包括职学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。
(1)系统以菜单方式工作
(2)学生信息录入功能。
(3)输出学生信息、浏览学生信息功能。
(4)查询和排序功能:
(至少一种查询方式),如按学号查询、按姓名查询等。
(5)学生信息删除、修改功能(任选项)。
(6)添加学生信息。
【测试数据】
输入:
设输入四个学生信息,以最后一个学生的学号为0来结束输入,学号是整型。
预期的输出结果:
预期的输出结果请参见程序后的运行结果。
【数据结构】
排序记录的数据元素表采用一维数组存储结构,每个元素包含8个关键字段,其类型描述为:
#include
#include//分配size字节的存储区
#include//包含字符串处理函数的头文件,可以直接调用现有的字符串处理的一系列函数
#definelensizeof(structstudent)//宏定义求字节运算符
#include//清屏功能
structstudent//声明一个结构体类型structstudent
{
longnum;//定义学号为long型数据
charname[15];//定义姓名
intage;//定义年龄
charsex[3];//定义性别
charchushen[10];//定义出生
chardizhi[20];//定义出生地址
charphone[11];//定义电话
charemail[20];//定义邮箱
structstudent*next;//next是指针变量,指向结构体变量
【算法思想】
利用一维结构体存放所有学生的信息,输入后,在输出时要对学生按学号的高低排序,然后可以执行按学号查询学生信息,输入学号,删除学生信息,输入学号可以找出该学生信息,然后选择修改学生信息,如果来了新学生,还可以添加学生信息。
【总体设计】
主菜单包括:
输入函数、学号排序、浏览函数、删除函数、修改函数、添加函数。
图1-1学生管理总体设计
【模块划分】
一、主函数:
main()
显示系统工作菜单,显示该系统的所有功能。
告诉使用者所有将会调用的被
调函数,再运用选择函数switch即可根据使用者所输入的学号进入对应的功能程序。
并且对菜单做了一个循环,进行完一个选择后,按回车键可进行清屏功能,把屏幕上除了主菜单以外都清空,然后可以继续选择那些可以使用的功能,这样可以方便使用者使用,并且每一步都很清晰。
以8退出系统。
二、输入函数:
structstudent*creat()
在该程序的前面已经定义了一个结构体structstudent用来储存学生的所有信息,(学号、年龄、姓名、性别、出生日期、地址、电话、邮箱)。
定义p1和p2,structstudent*p1,*p2;p1,p2是指向structstudent类型数据的指针变量。
定义一个n=0,n是输入的个数,主要作用是:
如果输入一个学生信息,首地址指向p1,head=p1;否则p2的下一个地址指向p1,p2指向p1.p2->next=p1;p2=p1;学号控制循环。
三、排序函数:
voidpaixu(structstudent*head)
用一个for语句做循环,不是NULL的话,指针指向下一个,按学生学号高低排序。
整形直接交换,字符型用strcpy交换,类型相当于两个数据之间的交换。
四、输出函数:
voidprintlist(structstudent*head)
在主函数里边用while控制循环,输出学生信息,然后指针指向下一个。
5、查询函数:
voidfindList_num(structstudent*head)和
voidfindList_num(structstudent*head)
输入一个学号或姓名,做一个for循环,即指针pt指向第一个地址,再定义一个指针p1,让它等于pt,他是紧跟着pt后面的一个指针,让p1->next不等于NULL,pt指向下一个地址。
这样就能修改最后一个学生信息了。
如果要查询的学生的学号在学生里,就输出该学生信息,否则,就输出查询的学生信息不存在。
六、删除函数:
intshanchu(structstudent*head)
输入一个学号,先找到这个学生的信息。
如果输入的学号在学生信息中,就进行以下循环:
如果输入的是第一个学生的话,就head等于第二个学生信息;如果输入的学生信息是最后一个,就让倒数第二个等于NULL;否则的话,就让下一个学生信息覆盖前一个。
如果输入的学号不在学生信息中,输出“此学生信息不存在”。
七、修改函数:
structstudent*delList(structstudent*head,longdel_num)
输入要修改的学号,找到该学生并且输出该学生的信息。
然后屏幕上会出现学生信息的所有项目,用switch进行选择修改的项目。
选择后输入新的学生信息,用它来覆盖原来的学生信息。
八、添加函数:
voidinsert(structstudent*head)
用一个while语句while(p2->next!
=NULL)控制循环,p2的指针指向下一个地址,即p2=p2->next;这是找到最后一个地址,然后开辟动态存储区,p1=(structstudent*)malloc(len);输入要添加的学号,用学号为0来终止循环,如果不为0,就继续输入学生信息。
【源程序】
#include
#include//分配size字节的存储区
#include//包含字符串处理函数的头文件,可以直接调用现有的字符串处理的一系列函数
#definelensizeof(structstudent)//求字节运算符
#include//清屏功能
FILE*fp;
structstudent//声明一个结构体类型structstudent
{intnum;//学号为整型
charname[20];//姓名为字符串
chargenter[10];//性别为字符串
intage;//年龄为整型
charxueli[20];//学历为字符串
intgongzi;//学号为整型
charaddress[30];//地址为字符串
charphone[11];//电话为字符串
structstudent*next;//next是指针变量,指向结构体变量
};
voidmenu()
{
printf("===========学生信息管理系统==========\n\n");
printf("1、录入学生信息\n");
printf("2、浏览学生信息\n");
printf("3、查询学生信息\n");
printf("4、删除学生信息\n");
printf("5、插入学生信息\n");
printf("6、修改学生信息\n");
printf("7、排序学生信息\n");
printf("8、退出管理系统\n");
printf("=====================================\n");
}
structstudent*creat()//录入学生信息
{
intn;
structstudent*head;
structstudent*p1,*p2;
n=0;
p1=p2=(structstudent*)malloc(len);
scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&p1->num,&p1->age,p1->name,p1->sex,p1->chushen,p1->dizhi,p1->phone,p1->email);
head=NULL;
while(p1->num!
=0)
{
n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(structstudent*)malloc(len);
scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&p1->num,&p1->age,p1->name,p1->sex,p1->chushen,p1->dizhi,p1->phone,p1->email);
}
p2->next=NULL;
return(head);
}
voidinsert(structstudent*head)//插入学生信息
{
intsearch_num;
structstudent*p,*q,*s;
p=head;
printf("在哪个学生前插入请输入学号:
\n");
scanf("%d",&search_num);
while((p!
=NULL)&&(p->num!
=search_num))
{
q=p;
p=p->next;
}
s=(structstudent*)malloc(len);
q->next=s;
system("cls");
printf("请输入学生信息:
\n");
printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n");
scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&s->num,&s->age,s->name,s->sex,s->chushen,s->dizhi,s->phone,s->email);
s->next=p;
}
voidprintList(structstudent*head)//浏览全部学生信息
{
structstudent*p;
p=head;
if(head==NULL)
printf("没有学生信息!
!
\n");
else
{
do
{
fread(p,len,1,fp);
printf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->age,p->name,p->sex,p->chushen,p->dizhi,p->phone,p->email);
p=p->next;
}while(p!
=NULL);
}
}
voidfindList_num(structstudent*head,longsearch_num)//按学号查找
{
structstudent*p;
p=head;
while((p!
=NULL)&&(p->num!
=search_num))
p=p->next;
if(p!
=NULL)
printf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->age,p->name,p->sex,p->chushen,p->dizhi,p->phone,p->email);
else
printf("没有该学生信息!
!
\n");
}
voidfindList_name(structstudent*head,char*search_name)//按姓名查找
{
structstudent*p;
intcmp1=0,cmp=0;
p=head;
while(p!
=NULL)
if(strcmp(p->name,search_name)!
=0)
{
p=p->next;
cmp++;
}
else
{
printf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->age,p->name,p->sex,p->chushen,p->dizhi,p->phone,p->email);
p=p->next;
cmp1=1;
}
if(cmp!
=0&&cmp1==0)
printf("没有该学生信息!
!
\n");
}
voidxiugai(structstudent*p1,longxiu_num)//修改学生信息
{
structstudent*p2;
p2=p1;
while((p2!
=NULL)&&(p2->num!
=xiu_num))
p2=p2->next;
if(p2!
=NULL)
{
scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&p2->num,&p2->age,p2->name,p2->sex,p2->chushen,p2->dizhi,p2->phone,p2->email);
}
else
printf("没有该学生信息!
!
\n");
}
structstudent*delList(structstudent*head,longdel_num)//删除学生信息
{
structstudent*p,*q;
p=head;
q=head;
while(p&&(p->num!
=del_num))
{
q=p;
p=p->next;
}
if(p==NULL)
printf("无此学号!
\n");
else{
if(p==head)
{
head=p->next;
free(p);
}
else{
q->next=p->next;
free(p);
}
}
returnhead;
}
voidpaixu(structstudent*head)//按学号排序
{
structstudent*p,*f,*t;
charch[100];
inti;
t=f=p=head;
for(p=head;p->next!
=NULL;p=p->next)
{
for(t=head,f=t->next;t->next!
=NULL;t=t->next,f=f->next)
{
if(t->num>f->num>0)
{
i=t->num;
t->num=f->num;
f->num=i;
i=t->age;
t->age=f->age;
f->age=i;
strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);
strcpy(ch,t->sex);
strcpy(t->sex,f->sex);
strcpy(f->sex,ch);
strcpy(ch,t->chushen);
strcpy(t->chushen,f->chushen);
strcpy(f->chushen,ch);
strcpy(ch,t->dizhi);
strcpy(t->dizhi,f->dizhi);
strcpy(f->dizhi,ch);
strcpy(ch,t->phone);
strcpy(t->phone,f->phone);
strcpy(f->phone,ch);
strcpy(ch,t->email);
strcpy(t->email,f->email);
strcpy(f->email,ch);
}
}
}
//returnhead;
}
voidsave(structstudent*head)//保存为磁盘文件
{
structstudent*p;
if((fp=fopen("keshe","w"))==NULL)//打开一个文件
{
printf("cannotopenthisfile\n");
exit(0);
}
p=head;
while(p!
=NULL)
{
fprintf(fp,"%d\n",p->num);
fprintf(fp,"%d\n",p->age);
fprintf(fp,"%s\n",p->name);
fprintf(fp,"%s\n",p->sex);
fprintf(fp,"%s\n",p->chushen);
fprintf(fp,"%s\n",p->dizhi);
fprintf(fp,"%s\n",p->phone);
fprintf(fp,"%s\n",p->email);
p=p->next;
}
fclose(fp);
}
structstudent*read()//从磁盘读取文件
{
structstudent*head=NULL;
structstudent*p=NULL;
structstudent*t=NULL;
inta;
//fp=fopen("keshe","r");
if((fp=fopen("keshe","r"))==NULL)//打开一个文件
{
printf("cannotopenthisfile\n");
exit(0);
}
while
(1)
{
t=(structstudent*)malloc(len);
a=fscanf(fp,"%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&t->num,&t->age,t->name,t->sex,t->chushen,t->dizhi,t->phone,t->email);
if(a==0||a==-1)
returnhead;
t->next=NULL;
if(p==NULL)
{
p=t;
head=t;
}
else
{
p->next=t;
p=p->next;
p->next=NULL;
}
}
fclose(fp);
}
voidmain()//主函数
{
intcode=0;
structstudent*pt=NULL;
for(code=1;;code++)//控制循环
{
menu();//调用菜单函数
printf("请输入序号:
\n");//提示输入序号
scanf("%d",&code);
system("cls");//清屏(下边也是这样的功能)
switch(code)//选择序号进行功能选择
{
case1:
{
system("cls");
printf("===========================输入学生信息==============================\n");
printf("---------------------------------------------------------------------\n");
printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n");
pt=creat();//调用输入函数
save(pt);//将数据存储到磁盘中
system("cls");
printf("===========================输入学生信息==============================\n");
printf("---------------------------------------------------------------------\n");
printf("************成功输入学生信息***********!
!
\n\n");
printf("按回车键返回主菜单\n");
getchar();
getchar();//按回车键返回
system("cls");
};break;
case2:
{
system("cls");
printf("===========================学生信息表================================\n");
printf("---------------------------------------------------------------------\n");