系统介绍:
该系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生的各种信息进行日常管理,如查询、修改、增加、删除等。
功能介绍:
实现学生信息的查询、修改、增加、删除、按学号删除学生信息和保存学生信息(建立文本文档)。
函数声明:
void help(); //帮助界面
void readfile(); //读入数据
void seek(); //查找信息
void modify(); //修改数据
void insert(); //插入数据
void del(); //删除数据
void display(); //显示信息
void save(); //保存信息
void menu(); // 菜单
文件读取函数实现:
void readfile()
{
char filename[20]; /* 文件名*/
FILE *fp; /* 文件指针*/
int i=0;
printf("请输入已经存有学生信息的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL) /* 以只读的方式打开指定文件*/
{
printf("打开文件%s错误",filename);
printf("请先增加学生信息在执行此操作\n");
system("pause");
return;
}
/* 循环读入学生信息*/
while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].address ,&stu[i].e_mail,&stu[i].tel ,&stu[i].birth )==8)
{
i++;
}
n=i;
if(0==i)
printf("文件为空,请先选择菜单4增加学生信息\n");
else
printf("读入成功\n");
fclose(fp);
system("pause");
}
查找函数的实现:
void seek() /*查找*/
{
int i,item,flag;
char s1[20];
printf("**************************\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("**************************\n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("学号\t学生姓名 年龄\t性别\t地址\t\t邮箱\t\t电话\t\t出生日期 \n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
if(0==flag)
printf("该学号不存在!\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("学号\t学生姓名 年龄\t性别\t地址\t\t邮箱\t\t电话\t\t出生日期 \n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
if(0==flag)
printf("该姓名不存在!\n"); break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
修改信息函数的实现:
void modify() /*修改信息*/
{
int i,item,num; /* item代表子菜单的编号,num是保存要修改信息的学生的序号*/
char sex1,s1[20],s2[20];
char address1;
char e_mail1;
char tel1;
char birth1;
printf("请输入要要修改的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*比较字符串是否相等*/
num=i;
printf("------------------\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");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s",s2);
strcpy_s(stu[num].name,s2); break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d",stu[num].age);break;
case 3:
printf("请输入新的性别:\n");
scanf("%s",&sex1);
stu[num].sex=sex1; break;
case 4:
printf("请输入新的地址:\n");
scanf("%s",&address1);
strcpy_s(stu[num].address ,&address1); break;
case 5:
printf("请输入新的邮箱:\n");
scanf("%s",&e_mail1);
strcpy_s(stu[num].e_mail,&e_mail1); break;
case 6:
printf("请输入新的电话:\n");
scanf("%s",&tel1);
strcpy_s(stu[num].tel,&tel1); break;
case 7:
printf("请输入新的出生日期:\n");
scanf("%s",&birth1);
strcpy_s(stu[num].birth,&birth1); break;
default:printf("请在1-7之间选择\n");
}
}
}
插入信息函数的实现:
void insert() /*插入函数*/
{
int j=n,i,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
if(m>0)
{
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d位学生的学号(查重):\n",j+1);
scanf("%s",stu[j].code);
for(i=0;i<j;i++) /*和之前的学号比较,如果重复,重新输入*/
if(strcmp(stu[j].code,stu[i].code)==0)
{
printf("已有该学号,请重新录入\n");
flag=1;
break; /*如有重复,退出循环*/
}
}
printf("请输入第%d 个学生的学号:\n",j+1);
scanf("%s",&stu[j].code,8);
printf("请输入第%d 个学生的姓名:\n",j+1);
scanf("%s",&stu[j].name);
printf("请输入第%d 个学生的年龄:\n",j+1);
scanf("%d",&stu[j].age);
printf("请输入第%d 个学生的性别:\n",j+1);
scanf(" %c",&stu[j].sex);
printf("请输入第%d 个学生的地址\n",j+1);
scanf("%s",&stu[j].address );
printf("请输入第%d 个学生的邮箱:\n",j+1);
scanf("%s",&stu[j].e_mail );
printf("请输入第%d 个学生的电话:\n",j+1);
scanf("%s",&stu[j].tel );
printf("请输入第%d 个学生的出生日期:\n",j+1);
scanf("%s",&stu[j].birth );
if(0==flag)
{
j++;
}
}
while(j<n+m);
}
n+=m;
printf("信息增加完毕!\n\n");
system("pause");
}
删除信息函数的实现:
void del()
{
int i,j,flag=0; /* flag为0表示查找失败,为1表示查找成功*/
char s1[20];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*找到要删除的学生记录*/
{
flag=1; /*查找成功*/
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0) /*查找失败*/
printf("该学号不存在!\n");
if(flag==1)
{
printf("删除成功,显示结果请选择菜单\n");
n--;
}
system("pause");
}
展示函数的实现:
void display()
{
int i;
printf("共有%d位学生的信息:\n",n);
if(0!=n)
{
printf("学号\t学生姓名 年龄\t性别\t地址\t\t邮箱\t\t电话\t\t出生日期 \n");
printf("--------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
}
system("pause");
}
保存信息函数的实现:
void save()
{
int i;
FILE *fp;
char filename[20];
printf("请命名要保存该信息的文件名:\n"); /*输入要保存的文件的名字*/
scanf("%s",filename);
fp=fopen(filename,"w");
for(i=0;i<n;i++)
{
fprintf(fp,"%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
printf("保存成功\n");
fclose(fp);
system("pause");
}
菜单界面设计:
void menu()/* 界面*/
{
int num;
printf("Designer by MaLong:\n\n");
printf(" 学生管理系统 V2.0 \n\n");
printf("\t**********************************************************************************\n");
printf("\t* 0. 系统帮助及说明 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 1. 刷新学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 2. 查询学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 3. 修改学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 4. 增加学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 5. 按学号删除信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 6. 展示当前学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 7. 保存当前学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 8. 退出系统 *\n");
printf("\t**********************************************************************************\n\n");
printf("请输入您的选项(0~8):\n\n");
主函数实现:
int main()
{
while(1)//循环打印菜单
{
menu();
printf("请输入您的选项(0~8):\n\n");
scanf("%d",&num);
switch(num)
{
case 0:help();;break;
case 1:readfile();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:exit(0);break;
default:printf("请在0-8之间选择\n");
}
}
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS //消除 scanf/fopen 的unsafe warning
//scanf -> scanf fopen -> fopen_s
#include
#include
#include
struct Student
{
char code[20]; /* 学号*/
char name[10]; /* 姓名*/
int age; /* 年龄*/
char sex; /* 性别*/
char address[80];/*地址*/
char e_mail[50];/*邮箱*/
char tel[11];/*电话*/
char birth[40];/*出生日期*/
}stu[200];
int n=0, m=0;/*定义全局变量, n代表当前记录的学生总人数,m为新增加的学生人数*/
/* 函数声明*/
void help(); /* 帮助界面*/
void readfile(); /* 读入数据*/
void seek(); /* 查找信息*/
void modify(); /* 修改数据*/
void insert(); /* 插入数据*/
void del(); /* 删除数据*/
void display(); /* 显示信息*/
void save(); /* 保存信息*/
void menu(); /* 菜单*/
int main()
{
while(1)//循环打印菜单
{
menu();
}
system("pause");
return 0;
}
void help() /* 帮助信息*/
{
printf("_______________________________________________________\n");
printf("\n欢迎使用系统帮助!\n");
printf("\n首次进入系统后,请先选择增加学生信息;\n");
printf("\n按照菜单提示输入数字代号;\n");
printf("\n增加学生信息后记得保存;\n");
printf("\n感谢您的使用!\n");
printf("_______________________________________________________\n");
system("pause");
}
void readfile()
{
char filename[20]; /* 文件名*/
FILE *fp; /* 文件指针*/
int i=0;
printf("请输入已经存有学生信息的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL) /* 以只读的方式打开指定文件*/
{
printf("打开文件%s错误",filename);
printf("请先增加学生信息在执行此操作\n");
system("pause");
return;
}
/* 循环读入学生信息*/
while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].address ,&stu[i].e_mail,&stu[i].tel ,&stu[i].birth )==8)
{
i++;
}
n=i;
if(0==i)
printf("文件为空,请先选择菜单4增加学生信息\n");
else
printf("读入成功\n");
fclose(fp);
system("pause");
}
void seek() /*查找*/
{
int i,item,flag;
char s1[20];
printf("**************************\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("**************************\n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("学号\t学生姓名 年龄\t性别\t地址\t\t邮箱\t\t电话\t\t出生日期 \n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
if(0==flag)
printf("该学号不存在!\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("学号\t学生姓名 年龄\t性别\t地址\t\t邮箱\t\t电话\t\t出生日期 \n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
if(0==flag)
printf("该姓名不存在!\n"); break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
void modify() /*修改信息*/
{
int i,item,num; /* item代表子菜单的编号,num是保存要修改信息的学生的序号*/
char sex1,s1[20],s2[20];
char address1;
char e_mail1;
char tel1;
char birth1;
printf("请输入要要修改的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*比较字符串是否相等*/
num=i;
printf("------------------\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");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s",s2);
strcpy_s(stu[num].name,s2); break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d",stu[num].age);break;
case 3:
printf("请输入新的性别:\n");
scanf("%s",&sex1);
stu[num].sex=sex1; break;
case 4:
printf("请输入新的地址:\n");
scanf("%s",&address1);
strcpy_s(stu[num].address ,&address1); break;
case 5:
printf("请输入新的邮箱:\n");
scanf("%s",&e_mail1);
strcpy_s(stu[num].e_mail,&e_mail1); break;
case 6:
printf("请输入新的电话:\n");
scanf("%s",&tel1);
strcpy_s(stu[num].tel,&tel1); break;
case 7:
printf("请输入新的出生日期:\n");
scanf("%s",&birth1);
strcpy_s(stu[num].birth,&birth1); break;
default:printf("请在1-7之间选择\n");
}
}
}
void insert() /*插入函数*/
{
int j=n,i,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
if(m>0)
{
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d位学生的学号(查重):\n",j+1);
scanf("%s",stu[j].code);
for(i=0;i<j;i++) /*和之前的学号比较,如果重复,重新输入*/
if(strcmp(stu[j].code,stu[i].code)==0)
{
printf("已有该学号,请重新录入\n");
flag=1;
break; /*如有重复,退出循环*/
}
}
printf("请输入第%d 个学生的学号:\n",j+1);
scanf("%s",&stu[j].code,8);
printf("请输入第%d 个学生的姓名:\n",j+1);
scanf("%s",&stu[j].name);
printf("请输入第%d 个学生的年龄:\n",j+1);
scanf("%d",&stu[j].age);
printf("请输入第%d 个学生的性别:\n",j+1);
scanf(" %c",&stu[j].sex);
printf("请输入第%d 个学生的地址\n",j+1);
scanf("%s",&stu[j].address );
printf("请输入第%d 个学生的邮箱:\n",j+1);
scanf("%s",&stu[j].e_mail );
printf("请输入第%d 个学生的电话:\n",j+1);
scanf("%s",&stu[j].tel );
printf("请输入第%d 个学生的出生日期:\n",j+1);
scanf("%s",&stu[j].birth );
if(0==flag)
{
j++;
}
}
while(j<n+m);
}
n+=m;
printf("信息增加完毕!\n\n");
system("pause");
}
void del()
{
int i,j,flag=0; /* flag为0表示查找失败,为1表示查找成功*/
char s1[20];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*找到要删除的学生记录*/
{
flag=1; /*查找成功*/
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0) /*查找失败*/
printf("该学号不存在!\n");
if(flag==1)
{
printf("删除成功,显示结果请选择菜单\n");
n--;
}
system("pause");
}
void display()
{
int i;
printf("共有%d位学生的信息:\n",n);
if(0!=n)
{
printf("学号\t学生姓名 年龄\t性别\t地址\t\t邮箱\t\t电话\t\t出生日期 \n");
printf("--------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
}
system("pause");
}
void save()
{
int i;
FILE *fp;
char filename[20];
printf("请命名要保存该信息的文件名:\n"); /*输入要保存的文件的名字*/
scanf("%s",filename);
fp=fopen(filename,"w");
for(i=0;i<n;i++)
{
fprintf(fp,"%s\t%s\t %d\t%c\t%s\t%s\t%s\t%s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].address ,stu[i].e_mail ,stu[i].tel,stu[i].birth );
}
printf("保存成功\n");
fclose(fp);
system("pause");
}
void menu()/* 界面*/
{
int num;
printf("Designer by MaLong:\n\n");
printf(" 学生管理系统 V2.0 \n\n");
printf("\t**********************************************************************************\n");
printf("\t* 0. 系统帮助及说明 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 1. 刷新学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 2. 查询学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 3. 修改学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 4. 增加学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 5. 按学号删除信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 6. 展示当前学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 7. 保存当前学生信息 *\n");
printf("\t**********************************************************************************\n");
printf("\t* 8. 退出系统 *\n");
printf("\t**********************************************************************************\n\n");
printf("请输入您的选项(0~8):\n\n");
scanf("%d",&num);
switch(num)
{
case 0:help();;break;
case 1:readfile();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:exit(0);break;
default:printf("请在0-8之间选择\n");
}
}
运行结果: