学生信息管理系统
1. 需求分析
管理学生基本信息的程序,以输入他的姓名,学号以及电话号码可以查询所在学院,家庭住址,以及电话号码,并且可以有绩点的输入与查询等,可以显示,查询以及删除学生信息,可以通过排序按照学生的学号将其排序
2 .概要设计
使用C语言中的结构体链表来存储数据
用文件的拷贝来实现冒泡法排序,以及利用文件的读取来保存输入的信息,结构体链表可以方便存储成组的相关数据。结构体链表可以方便结构体的添加、删除、查找。另外结构体链表可以让一个结构体的相关数据集体存储,不仅十分方便我们对数据的操作,而且让程序的的思路特别清晰,让程序更加清晰易懂。通过对结构以链表的操作来控制数据。在添加数据时,增加链表的长度,在删除时先通过查找找到此数据的前驱和后续,来对数据进行删除。
用户界面设计
1:添加所有学生的信息 2:显示学生所有信息
3:按学号进行排序 4:插入学生所有信息
5:按姓名删除学生信息 6:查找学生所有的信息
7:从文件只中读取数据 8:把数据写入文件中
0:退出学生信息管理系统
运行说明
程序自动保存输入的学生信息,存入相应的文件名为filename中,查询时自动调用文件。
3 运行环境
硬件环境
PC
软件环境
(1)Windows Vista/2003/XP
(2)计算机及VisualC++编程环境。
4 开发工具和编程语言
开发工具
Microsoft Visual C++
编程语言
Visual C
5 详细设计
学生信息管理系统
(1)添加学生信息的基本原理
用指针*P来创建一个存储单元,来存储学生的信息:学生的姓名、学号、地址,学院,绩点,电话号码。然后再和链变相连,有结构体链表来存储所有学生的信息。*MP指针只想最后一个结构体链表的最后一个结构体
(2) 函数代码
void Input() /*输入若干条记录*/
{
int i=0;
char sign,x[10]; /*x[10]为清除多余的数据所用*/
n=0;
while(sign!='n'&&sign!='N') /*判断*/
{
printf("\t\t\tstudent's num:"); /*交互输入*/
scanf("\t\t\t%s",stud[i].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[i].name);
printf("\t\t\tstudent's address:");
scanf("\t\t\t%s",stud[i].address);
printf("\t\t\tstudent's xueyuan:");
scanf("\t\t\t%s",stud[i].xueyuan);
printf("\t\t\tstudent's jidian:");
scanf("\t\t\t%f",&stud[i].jidian);
printf("\t\t\tstudent's tel:");
scanf("\t\t\t%f",&stud[i].tel);
gets(x); /*清除多余的输入*/
printf("\t\t\tany more records?(Y/N)");
scanf("\t\t\t%c",&sign); /*输入判断*/
i++; n++;
}
}
(2)添加学生信息的原理图
在学生信息管理系统中显示学生的信息
void Display() /*显示所有记录*/
{
int i;
du();
du1();
printf("----------------------------------------------------------------------------\n"); /*格式头*/
printf("number\t name address xueyuan\t jidian tel\n");
printf("----------------------------------------------------------------------------\n");
for(i=1;i<n+1;i++) /*循环输入*/
{
printf("%-12s%-11s%-14s%-13s%%\n",stud[i-1].num,stud[i-1].name,stud[i-1].address,stud[i-1].xueyuan,stud[i-1].jidian,stud[i-1].tel);
if(i>1&&i%10==0) /*每十个暂停*/
{printf("\t----------------------------------------------------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
用printf来显示学生的信息,并且用for循环来实现所有的学生信息都能显示。
在学生管理系统中按学号进行排序
1利用拷贝函数实现冒泡法排序,学号与学号间进行大小的相互比较,大的自动下沉,这样每进行一次比较,大的都会沉到下面,最终是由小到大的排列。
2 排序函数代码
void Sort_by_num() /*按学号排序*/
{
int i,j;
float *p,*q,s;
char t[10];
du();
du1();
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{
strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
strcpy(stud[j].address,t);
strcpy(stud[j+1].address,stud[j].address);
strcpy(stud[j].address,t);
strcpy(t,stud[j+1].xueyuan);
strcpy(stud[j+1].xueyuan,stud[j].xueyuan);
strcpy(stud[j].xueyuan,t);
p=&stud[j+1].jidian;
q=&stud[j].jidian;
s=*p;
*p=*q;
*q=s;
p=&stud[j+1].tel;
q=&stud[j].tel;
s=*p;
*p=*q;
*q=s;
}
printf("排序成功\n");
system("pause");
}
在学生管理系统中按姓名进行删除信息
首先用指针找到此学生的前驱和后续,然后让前驱的NEXT指向后续,就删除所要删除的信息了。
2.删除函数代码
void Delete_a_record() /*按姓名查找,删除一条记录*/
{
char s[20];
int i=0,j;
du();
du1();
printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*返回失败信息*/
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
strcpy(stud[j].address,stud[j+1].address);
strcpy(stud[j].xueyuan,stud[j+1].xueyuan);
stud[j].jidian=stud[j+1].jidian;
stud[j].tel=stud[j+1].tel;
}
n--;
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
}
5查找学生信息代码
void Query_a_record() /*查找并显示一个记录(按姓名查找)*/
{
char s[20];
int i=0;
du();
du1();
printf("\t\t\tinput his(her) name:"); /*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t\tnot find!\n"); /*输入失败信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/
printf("%-12s%-11s%-14s%-7s%%\n",stud[i].num,stud[i].name,stud[i].address,stud[i].xueyuan,stud[i].jidian,stud[i].tel);
system("pause");
}
开始部分
添加学生信息
显示学生信息
排序后显示的结果
按姓名删除学生信息
按姓名查找学生的信息
退出管理系统
总结:在此程序中做了几个函数,先是两个文件读写的函数,再后来的函数像插入,删除,显示,查找等都有调用,将输入的学生信息保存起来,下次登录时可以直接调用,利用了数据结构里的链表指针来存储学生信息,以及利用了冒泡排序的方法将学生按照学号排序,方便了管理者的操作。
本次试验复习了C语言的知识,更加巩固了,然后是利用了新学的数据结构知识,虽然很多算法不能灵活运用,但经过以后的学习我相信能够将这门课程学以致用!
参 考 文 献
严蔚敏 吴伟民 编著 数据结构(C语言版) 清华大学出版社
秦玉平 马靖善 冯佳昕 主编数据结构(C语言版 )清华大学出版社
PAGE 5