1.引言
1.1课题背景
学生信息管理系统已经成为每个大学教务系统不可或缺的组成部分。一个功能齐全、简单易用的学生个人信息管理系统能有效的减轻学校记录、查找在校生信息的负担,它的内容对于我们日常管理在校学生来说也至关重要。所以学生个人信息管理系统应该能够为用户提供良好的储存方式和快捷的查询手段。近年来,随着我们网络信息的发展我们每个人的信息使用频率越来越高,有关的各种信息量也能成倍增长。面对庞大的信息量需要有学生个人信息管理系统来提高管理工作的质量。本系统主要用于学生个人信息管理,总体任务是实现个人信息的系统化、规范化和自动化,其主要任务是用计算机对个人的各种信息进行日常管理,如查询、修改、增加、删除等,是个人信息的管理向着规范化、简单化、有效化的发展。
1.2所用技术
C语言是⼀门通⽤计算机编程语⾔,应⽤⼴泛。C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。C语⾔的设计⽬标是提供⼀种能以简易的⽅式编译、处理低级存储器、产⽣少量的机器码以及不需要任何运⾏环境⽀持便能运⾏的编程语言。
2.程序设计
2.1基本思路
本次设计使用C语言进行学生个人信息管理系统的开发,主要包括管理系统界面、录入界面、浏览界面、查询界面、排序界面、修改界面、删除界面,管理者可以通过管理系统查询学生的各种信息。本次设计只包含管理端。
管理端:管理员可在管理端进行学生信息录入、浏览、查询、排序、修改、删除等功能,将学生个人信息进行保存。
2.2系统要实现的功能
①添加学生信息
记录新来学生的相关信息
②浏览学生信息
检查录入的学生个人信息是否有误
③查询学生信息
查询所需要的学生的相关信息
④排序学生信息
对学生信息按照一定的顺序排列
⑤修改学生信息
对学生信息中有误的信息进行修改
⑥删除学生信息
对离校毕业的学生进行信息删除
3.程序实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include <conio.h>
void gotoxy(int,int);
void gotoxy(int x, int y)
//光标的控制
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
}
void background()
//欢迎界面
{
int i;
gotoxy(35,10);
printf("■■■■■■■■■■■■■■■■■■■■■");
for(i=11;i<15;i++)
{
gotoxy(35,i);printf("■");
gotoxy(75,i);printf("■");
}
gotoxy(41, 13);
printf("\t学生信息管理系统");
gotoxy(35, 15);
printf("■■■■■■■■■■■■■■■■■■■■■");
gotoxy(45, 18);
printf("软件制作:");
printf("第一小组");
gotoxy(45, 19);
printf("按下ENTER键以继续");
getchar();
//暂停看界面
}
typedef struct pupil
{
char name[10];//姓名
char num[20];//学号
char gender[5];//性别
char phone[16];//电话
int age;//年纪
char address[20];//地址
char birth[20];//生日
}pup;
typedef struct table
{
struct pupil stu;//学生的信息
struct table* next;//下一节点指针
}*plist,list;
plist leave_list(plist head)
{
plist x=head;
plist y=head;
while(x)
{
y=x;
x=x->next;
free(y);
}
return NULL;
}
void Exhibition_list(plist head)//展示所有信息
{
plist x=head;
system("cls");
if(head==NULL)
{
printf("没有学生信息\n");
system("pause");
return ;
}
printf("姓名 学号 年龄 性别 生日 电话 \n");
while(x)
{
printf("%-8s",x->stu.name);
printf("%-12s",x->stu.num);
printf("%-8d",x->stu.age);
printf("%-8s",x->stu.gender);
printf("%-11s",x->stu.birth);
printf("%-13s",x->stu.phone);
x=x->next;
}
system("pause");
}
int standard()//打印主菜单
{
int m;
int i;
system("cls");
gotoxy(35,5);
printf("■■■■■■■■■■■■■■■■■■■■■");
for(i=6;i<15;i++)
{
gotoxy(35,i);printf("■");
gotoxy(75,i);printf("■");
}
gotoxy(41, 7);
printf("1:录入学生信息\n");
gotoxy(41, 8);
printf("2:浏览学生信息\n");
gotoxy(41, 9);
printf("3:查询学生信息\n");
gotoxy(41, 10);
printf("4:排序学生信息\n");
gotoxy(41, 11);
printf("5:修改学生信息\n");
gotoxy(41, 12);
printf("6:删除学生信息\n");
gotoxy(41, 13);
printf("0:运行结束\n");
gotoxy(41, 14);
printf("请输入你的选择:");
scanf("%d",&m);
while(m<0||m>6)
{
printf("输入数值不在范围之内!请尝试重新输入\n");
scanf("%d",&m);
}
return m;
}
plist addition_stu(plist head)//学生信息录入
{
plist x=NULL;
if(head==NULL)
{
head=(plist)malloc(sizeof(list));
head->next=NULL;
x=head;
}
else
{
x=head;
while(x->next)
{
x=x->next;
}
x->next=(plist)malloc(sizeof(list));
x=x->next;
x->next=NULL;
}
system("cls");
printf("请输入学生学号:");
scanf("%s",x->stu.num);
printf("请输入学生姓名:");
scanf("%s",x->stu.name);
printf("请输入学生性别:");
scanf("%s",x->stu.gender);
printf("请输入学生年龄:");
scanf("%d",&x->stu.age);
printf("请输入学生电话:");
scanf("%s",x->stu.phone);
printf("请输入学生生日(年-月):");
scanf("%s",x->stu.birth);
printf("请输入学生家庭地址:");
scanf("%s",x->stu.address);
printf("成功录入!\n");
system("pause");
return head;
}
void seek_num(plist head)
{
int signal=1;
char provision[30];
plist x=head;
system("cls");
printf("请输入需要查找的学生学号:");
scanf("%s",provision);
while(x)
{
if(!strcmp(provision,x->stu.num))
{
signal=0;
printf("学号 姓名 性别 年龄 电话 生日 地址\n");
printf("%-12s",x->stu.num);
printf("%-8s",x->stu.name);
printf("%-8s",x->stu.gender);
printf("%-8d",x->stu.age);
printf("%-13s",x->stu.phone);
printf("%-11s",x->stu.birth);
printf("%-10s\n",x->stu.address);
break;
}
x=x->next;
}
if(signal)
{
printf("无该学号的信息!\n");
}
system("pause");
}
void seek_name(plist head)
{
int signal=1;
char provision[30];
plist x=head;
system("cls");
printf("请输入需要查找的学生姓名:");
scanf("%s",provision);
while(x)
{
if(!strcmp(provision,x->stu.name))
{
signal=0;
printf("学号 姓名 性别 年龄 电话 生日 地址\n");
printf("%-12s",x->stu.num);
printf("%-8s",x->stu.name);
printf("%-8s",x->stu.gender);
printf("%-8d",x->stu.age);
printf("%-13s",x->stu.phone);
printf("%-11s",x->stu.birth);
printf("%-10s\n",x->stu.address);
break;
}
x=x->next;
}
if(signal)
{
printf("无该学生的信息!\n");
}
system("pause");
}
void seek_menu(plist head)
{
int m;
system("cls");
if(head==NULL)
{
printf("没有学生数据,请录入后再使用\n");
system("pause");
return ;
}
do
{
system("cls");
printf("1:按学号查找\n");
printf("2:按姓名查找\n");
printf("0:返回\n");
scanf("%d",&m);
while(m<0||m>2)
{
printf("输入数值不正确!请尝试重新输入\n");
scanf("%d",&m);
}
switch(m)
{
case 1:
seek_num(head);
break;
case 2:
seek_name(head);
break;
}
}
while(m!=0);
}
plist cut_num(plist head)//删除学生学号
{
char provision[30];
int signal=1;
plist x=head;
plist y=head;
system("cls");
printf("请输入要删除的学生学号:");
scanf("%s",provision);
while(x)
{
if(!strcmp(provision,x->stu.num))
{
signal=0;
printf("学号 姓名 性别 年龄 电话 生日 地址\n");
printf("%-12s",x->stu.num);
printf("%-8s",x->stu.name);
printf("%-8s",x->stu.gender);
printf("%-8d",x->stu.age);
printf("%-13s",x->stu.phone);
printf("%-11s",x->stu.birth);
printf("%-10s\n",x->stu.address);
if(y==x)
{
head=head->next;
free(x);
}//指针全部都指向头结点
else
{
y->next=x->next;
free(x);
}
break;
}
y=x;
x=x->next;
}
if(signal)
{
printf("无该学号的信息!\n");
}
else
{
printf("删除成功!\n");
}
system("pause");
return head;
}
plist cut_name(plist head)//删除学生姓名
{
char provision[30];
int signal=1;
plist x=head;
plist y=head;
system("cls");
printf("请输入要删除的学生姓名:");
scanf("%s",provision);
while(x)
{
if(!strcmp(provision,x->stu.name))
{
signal=0;
printf("学号 姓名 性别 年龄 电话 生日 地址\n");
printf("%-12s",x->stu.num);
printf("%-8s",x->stu.name);
printf("%-8s",x->stu.gender);
printf("%-8d",x->stu.age);
printf("%-13s",x->stu.phone);
printf("%-11s",x->stu.birth);
printf("%-10s\n",x->stu.address);
if(x==head)
{
head=head->next;
free(x);
}//指针全部都指向头结点
else
{
y->next=x->next;
free(x);
}
break;
}
x=x->next;
}
if(signal)
{
printf("无该学生信息!\n");
}
else
{
printf("删除成功!\n");
}
system("pause");
return head;
}
plist cut_menu(plist head)
{
int n;
system("cls");
if(head==NULL)
{
printf("无任何数据\n");
system("pause");
return head;
}
do
{
system("cls");
printf("1:按学号删除\n");
printf("2:按姓名删除\n");
printf("0:返回\n");
scanf("%d",&n);
while(n<0||n>2)
{
printf("输入数值不正确!请尝试重新输入\n");
scanf("%d",&n);
}
switch(n)
{
case 1:
head=cut_num(head);
break;
case 2:
head=cut_name(head);
break;
}
}
while(n!=0);
return head;
}
void revise(plist head)//修改学生信息
{
char provision[30];
char ch;
int signal=1;
plist x=head;
system("cls");
printf("需要修改的学生学号:");
scanf("%s",provision);
while(x)
{
if(!strcmp(provision,x->stu.num))
{
signal=0;
printf("学号 姓名 性别 年龄 电话 生日 地址\n");
printf("%-12s",x->stu.num);
printf("%-8s",x->stu.name);
printf("%-8s",x->stu.gender);
printf("%-8d",x->stu.age);
printf("%-13s",x->stu.phone);
printf("%-11s",x->stu.birth);
printf("%-10s\n",x->stu.address);
break;
}
x=x->next;
}
if(signal)
{
printf("无该学号的信息!\n");
}
else
{
printf("\n确认是否修改(Y/N):");
fflush(stdin);
scanf("%c",&ch);
fflush(stdin);
if(ch=='y'||ch=='Y')
{
printf("请输入学生学号:");
scanf("%s",x->stu.num);
printf("请输入学生姓名:");
scanf("%s",x->stu.name);
printf("请输入学生性别:");
scanf("%s",x->stu.gender);
printf("请输入学生年龄:");
scanf("%d",&x->stu.age);
printf("请输入学生电话:");
scanf("%s",x->stu.phone);
printf("请输入学生生日(年-月):");
scanf("%s",x->stu.birth);
printf("请输入学生家庭地址:");
scanf("%s",x->stu.address);
printf("修改成功!\n");
}
}
system("pause");
}
plist sequencing_num(plist head)//按学号排序
{
struct pupil provision;
plist x,y;
x=y=head;
while(y)
{
x=y->next;
while(x)
{
if(strcmp(y->stu.num,x->stu.num)>0)
{
provision=y->stu;
y->stu=x->stu;
x->stu=provision;
}
x=x->next;
}
y=y->next;
}
Exhibition_list(head);
return head;
}
plist sequencing_name(plist head)//按名字排序
{
struct pupil provision;
plist x,y;
x=y=head;
while(y)
{
x=y->next;
while(x)
{
if(strcmp(y->stu.name,x->stu.name)>0)
{
provision=y->stu;
y->stu=x->stu;
x->stu=provision;
}
x=x->next;
}
y=y->next;
}
Exhibition_list(head);
return head;
}
plist sequencing_menu(plist head)
{
int n;
system("cls");
if(head==NULL)
{
printf("无任何数据\n");
system("pause");
return NULL;
}
do
{
system("cls");
printf("1:按学号排序\n");
printf("2:按姓名排序\n");
printf("0:返回\n");
scanf("%d",&n);
while(n<0||n>2)
{
printf("输入数值不正确!请尝试重新输入\n");
scanf("%d",&n);
}
switch(n)
{
case 1:
head=sequencing_num(head);
break;
case 2:
head=sequencing_name(head);
break;
}
}
while(n!=0);
return head;
}
int main()
{
background();
system("cls");
plist head=NULL;
int i;
do
{
i=standard();
switch(i)
{
case 0:
head=leave_list(head);
break;
case 1:
head=addition_stu(head);
break;
case 2:
Exhibition_list(head);
break;
case 3:
seek_menu(head);
break;
case 4:
head=sequencing_menu(head);
break;
case 5:
revise(head);
break;
case 6:
head=cut_menu(head);
break;
}
}
while(i!=0);
return 0;
}