|
|
|
|
@ -0,0 +1,308 @@
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <conio.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include<windows.h>
|
|
|
|
|
|
|
|
|
|
#define L 30 //学号和姓名的最大字符数
|
|
|
|
|
#define count 400 //最大学生数
|
|
|
|
|
|
|
|
|
|
int n=0; //已存在学生数
|
|
|
|
|
struct stu_info
|
|
|
|
|
{
|
|
|
|
|
char name[L]; //姓名
|
|
|
|
|
char num[L]; //学号
|
|
|
|
|
int age; //年龄
|
|
|
|
|
char place[50]; //籍贯
|
|
|
|
|
char sex[L]; //性别
|
|
|
|
|
char clas[40]; // 班级
|
|
|
|
|
char department[30]; //系别
|
|
|
|
|
char domain[30]; //专业
|
|
|
|
|
char dowhat[10]; //学籍变化
|
|
|
|
|
}stu[count];
|
|
|
|
|
|
|
|
|
|
void add() //录入信息
|
|
|
|
|
{
|
|
|
|
|
char j;
|
|
|
|
|
front1:
|
|
|
|
|
system("cls");//清屏
|
|
|
|
|
printf("请输入姓名:\n");
|
|
|
|
|
scanf("%s",stu[n].name);
|
|
|
|
|
printf("请输入学号:\n");
|
|
|
|
|
scanf("%s",stu[n].num);
|
|
|
|
|
printf("请输入性别:\n");
|
|
|
|
|
scanf("%s",stu[n].sex);
|
|
|
|
|
printf("请输入年龄:\n");
|
|
|
|
|
scanf("%d",&stu[n].age);
|
|
|
|
|
printf("请输入班级:\n");
|
|
|
|
|
scanf("%s",stu[n].clas);
|
|
|
|
|
printf("请输入籍贯:\n");
|
|
|
|
|
scanf("%s",stu[n].place);
|
|
|
|
|
printf("请输入系别:\n");
|
|
|
|
|
scanf("%s",stu[n].department);
|
|
|
|
|
printf("请输入专业:\n");
|
|
|
|
|
scanf("%s",stu[n].domain);
|
|
|
|
|
printf("请输入学籍变化情况:\n");
|
|
|
|
|
scanf("%s",stu[n].dowhat);
|
|
|
|
|
getchar(); //吸收回车//
|
|
|
|
|
n++;
|
|
|
|
|
printf("是否继续(Y/N)?:\n");
|
|
|
|
|
j=getchar();
|
|
|
|
|
getchar(); //吸收回车//
|
|
|
|
|
if(j=='y'||j=='Y')
|
|
|
|
|
goto front1;//再次输入记录
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void arrange() //排序
|
|
|
|
|
{
|
|
|
|
|
int k,i;
|
|
|
|
|
struct stu_info t;
|
|
|
|
|
printf("学生姓名 学生学号 性别 年龄 班级 籍贯 系别 专业 学籍情况\n");
|
|
|
|
|
|
|
|
|
|
for(k=1;k<n;k++) //排序
|
|
|
|
|
for(i=n-1;i>=k;i--)
|
|
|
|
|
if(strcmp(stu[i].num,stu[i-1].num)<0)
|
|
|
|
|
{
|
|
|
|
|
t=stu[i];
|
|
|
|
|
stu[i]=stu[i-1];
|
|
|
|
|
stu[i-1]=t;
|
|
|
|
|
}
|
|
|
|
|
for(i=0;i<=n-1;i++)
|
|
|
|
|
printf("%s %s %s %d %s %s %s %s %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].clas,stu[i].place,stu[i].department,stu[i].domain,stu[i].dowhat);
|
|
|
|
|
|
|
|
|
|
system("pause");
|
|
|
|
|
system("cls");//清屏
|
|
|
|
|
}
|
|
|
|
|
void change() //修改//
|
|
|
|
|
{
|
|
|
|
|
int k=0,a,i;
|
|
|
|
|
char j;
|
|
|
|
|
char s1[L],s2[L];
|
|
|
|
|
front5: //标记位置//
|
|
|
|
|
system("cls");//清屏
|
|
|
|
|
printf("学生姓名 学生学号 性别 年龄 班级 籍贯 系别 专业 学籍情况\n");
|
|
|
|
|
for(i=0;i<n;i++)
|
|
|
|
|
printf("%s %s %s %d %s %s %s %s %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].clas,stu[i].place,stu[i].department,stu[i].domain,stu[i].dowhat);
|
|
|
|
|
printf("\n请输入要修改记录的学号:\n");
|
|
|
|
|
scanf("%s",s1);
|
|
|
|
|
for(i=0;i<n;i++) //查找信息
|
|
|
|
|
if(strcmp(stu[i].num,s1)==0)
|
|
|
|
|
{
|
|
|
|
|
k=1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if(k==1)
|
|
|
|
|
{
|
|
|
|
|
front6: //标记位置//
|
|
|
|
|
printf("学生姓名 学生学号 性别 年龄 班级 籍贯 系别 专业 学籍情况\n");
|
|
|
|
|
printf("%s %s %s %d %s %s %s %s %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].clas,stu[i].place,stu[i].department,stu[i].domain,stu[i].dowhat);
|
|
|
|
|
printf("\t\t-------------------------\n");
|
|
|
|
|
printf("\t\t||*********************||\n");
|
|
|
|
|
printf("\t\t|| 1、修改姓名 ||\n");
|
|
|
|
|
printf("\t\t|| 2、修改年龄 ||\n");
|
|
|
|
|
printf("\t\t|| 3、修改性别 ||\n");
|
|
|
|
|
printf("\t\t|| 4、修改籍贯 ||\n");
|
|
|
|
|
printf("\t\t|| 5、修改系别 ||\n");
|
|
|
|
|
printf("\t\t|| 6、修改专业 ||\n");
|
|
|
|
|
printf("\t\t|| 7、修改班级 ||\n");
|
|
|
|
|
printf("\t\t|| 8、修改学籍变化 ||\n");
|
|
|
|
|
printf("\t\t|| 0、退出该菜单 ||\n");
|
|
|
|
|
printf("\t\t||*********************||\n");
|
|
|
|
|
printf("\t\t-------------------------\n");
|
|
|
|
|
scanf("%d",&a);
|
|
|
|
|
switch(a)
|
|
|
|
|
{
|
|
|
|
|
case 1:
|
|
|
|
|
printf("该学生已存在的姓名:\n");
|
|
|
|
|
printf("%s\n",stu[i].name);
|
|
|
|
|
printf("请输入新的名字:\n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].name,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 2:
|
|
|
|
|
printf("该学生已存在的年龄:\n");
|
|
|
|
|
printf("%d\n",stu[i].age);
|
|
|
|
|
printf("请输入新的年龄:\n");
|
|
|
|
|
scanf("%d",&stu[i].age);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 3:
|
|
|
|
|
printf("该学生已存在的性别:\n");
|
|
|
|
|
printf("%s\n",stu[i].sex);
|
|
|
|
|
printf("请输入新的性别:\n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].sex,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 4:
|
|
|
|
|
printf("该学生已存在的籍贯:\n");
|
|
|
|
|
printf("%s\n",stu[i].place);
|
|
|
|
|
printf("请输入新的籍贯:\n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].place,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 5:
|
|
|
|
|
printf("该学生所在的系别:\n");
|
|
|
|
|
printf("%s\n",stu[i].department);
|
|
|
|
|
printf("请输入新的系别:\n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].department,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 6:
|
|
|
|
|
printf("该学生已选择的专业:\n");
|
|
|
|
|
printf("%s\n",stu[i].domain);
|
|
|
|
|
printf("请输入新的专业:\n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].domain,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 7:
|
|
|
|
|
printf("该学生所在的班级:\n");
|
|
|
|
|
printf("%s\n",stu[i].clas);
|
|
|
|
|
printf("请输入新的班级:\n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].clas,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 8:
|
|
|
|
|
printf("该学生已存在的学籍变化:\n");
|
|
|
|
|
printf("%s\n",stu[i].dowhat);
|
|
|
|
|
printf("请输入新的学籍变化情况: \n");
|
|
|
|
|
scanf("%s",s2);
|
|
|
|
|
strcpy(stu[i].dowhat,s2);
|
|
|
|
|
printf("修改成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
system("cls");
|
|
|
|
|
goto front6;
|
|
|
|
|
case 0:
|
|
|
|
|
getchar();
|
|
|
|
|
system("cls");
|
|
|
|
|
break;
|
|
|
|
|
default:printf("输入错误!请在0~8中选择!\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(k==0)
|
|
|
|
|
{
|
|
|
|
|
printf("找不到要修改的信息!\n");
|
|
|
|
|
system("pause");
|
|
|
|
|
getchar();
|
|
|
|
|
}
|
|
|
|
|
printf("请问是否继续修改学生信息(y/n):\n");
|
|
|
|
|
j=getchar();
|
|
|
|
|
getchar();
|
|
|
|
|
if(j=='y'||j=='Y') goto front5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
|
{
|
|
|
|
|
int i=0,j;
|
|
|
|
|
char d;
|
|
|
|
|
FILE *fp;
|
|
|
|
|
system("color E4");
|
|
|
|
|
system("mode con cols=120 lines=40");
|
|
|
|
|
fp=fopen("学籍管理.txt","r"); //读取文件中的信息//
|
|
|
|
|
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
int b=fscanf(fp,"%s %s %s %d %s %s %s %s %s\n",stu[i].name,stu[i].num,stu[i].sex,&stu[i].age,stu[i].clas,stu[i].place,stu[i].department,stu[i].domain,stu[i].dowhat);
|
|
|
|
|
if(b==EOF) //判断是否读到文件末尾
|
|
|
|
|
break;
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
fclose(fp);
|
|
|
|
|
n=i;
|
|
|
|
|
menu:
|
|
|
|
|
|
|
|
|
|
system("cls");
|
|
|
|
|
printf("\n\n\n\n");
|
|
|
|
|
printf("\t\t\t||---------------------学生学籍信息管理系统--------------------||\n");
|
|
|
|
|
printf("\t\t\t||***************************主菜单****************************||\n");
|
|
|
|
|
printf("\t\t\t|| 提醒:使用系统后,输入数据后请记得保存!: ||\n");
|
|
|
|
|
printf("\t\t\t|| --------------------------------------------------------- ||\n");
|
|
|
|
|
printf("\t\t\t|| 注意:每次进行录入,删除,修改操作后需进行保存显示才更新信息||\n");
|
|
|
|
|
printf("\t\t\t|| -------------------------- || ------------------------- ||\n");
|
|
|
|
|
printf("\t\t\t|| 1.录入学生信息 || 2.学生信息排序 ||\n");
|
|
|
|
|
printf("\t\t\t|| -------------------------- || ------------------------- ||\n");
|
|
|
|
|
printf("\t\t\t|| 3.修改学生信息 || 4. 保存学生信息 ||\n");
|
|
|
|
|
printf("\t\t\t|| -------------------------- || ------------------------- ||\n");
|
|
|
|
|
printf("\t\t\t|| 5.显示当前信息 || 0.退出系统 ||\n");
|
|
|
|
|
printf("\t\t\t|| -------------------------- || -------------------------- ||\n");
|
|
|
|
|
printf("\t\t\t|| 制作人 通信1801班 丁丹玲! ||\n");
|
|
|
|
|
printf("\t\t\t||*************************************************************||\n");
|
|
|
|
|
printf("\n\n请输入您需要的服务(0~7):\n");
|
|
|
|
|
scanf("%d",&j);
|
|
|
|
|
switch(j)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
printf("欢迎使用!\n");
|
|
|
|
|
return 0;
|
|
|
|
|
case 1: add();
|
|
|
|
|
goto menu;
|
|
|
|
|
case 2: arrange();
|
|
|
|
|
goto menu;
|
|
|
|
|
case 3: change();
|
|
|
|
|
goto menu;
|
|
|
|
|
case 4:
|
|
|
|
|
FILE *fq;
|
|
|
|
|
fq=fopen("学籍管理.txt","w");
|
|
|
|
|
for(i=0;i<n;i++)
|
|
|
|
|
{
|
|
|
|
|
fprintf(fq,"%s %s %s %d %s %s %s %s %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].clas,stu[i].place,stu[i].department,stu[i].domain,stu[i].dowhat);
|
|
|
|
|
}
|
|
|
|
|
fclose(fq);
|
|
|
|
|
printf("保存成功\n");
|
|
|
|
|
system("pause"); //等待用户信号//
|
|
|
|
|
goto menu;
|
|
|
|
|
case 5:
|
|
|
|
|
FILE *fz;
|
|
|
|
|
fz=fopen("学籍管理.txt","r");
|
|
|
|
|
d=fgetc(fz);
|
|
|
|
|
if(d==EOF)
|
|
|
|
|
{
|
|
|
|
|
printf("文件中没有信息,请重新录入!\n");
|
|
|
|
|
fclose(fz);
|
|
|
|
|
system("pause");
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
goto menu;
|
|
|
|
|
}
|
|
|
|
|
fclose(fz);
|
|
|
|
|
i=0;
|
|
|
|
|
printf("学生姓名 学生学号 性别 年龄 班级 籍贯 系别 专业 学籍情况\n");
|
|
|
|
|
for(i=0;i<n;i++)
|
|
|
|
|
printf("%s %s %s %d %s %s %s %s %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].clas,stu[i].place,stu[i].department,stu[i].domain,stu[i].dowhat);
|
|
|
|
|
system("pause");
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
goto menu;
|
|
|
|
|
default:
|
|
|
|
|
printf("输入错误,请重新输入!:\n");
|
|
|
|
|
system("pause");
|
|
|
|
|
getchar(); //吸收回车
|
|
|
|
|
goto menu;
|
|
|
|
|
}
|
|
|
|
|
}
|