|
|
#include"stdio.h"
|
|
|
#include"string.h"
|
|
|
#include"stdlib.h"
|
|
|
/*函数声明部分*/
|
|
|
void luru();
|
|
|
void liulan();
|
|
|
void xiugai();
|
|
|
void chaxun();
|
|
|
void shanchu();
|
|
|
void chongxie();
|
|
|
void paixu();
|
|
|
/*记录学生人数*/
|
|
|
int student=0;
|
|
|
/*学生信息储存结构体*/
|
|
|
struct student { //用于储存学生信息的结构体
|
|
|
char xuehao[12]; //储存11位学号
|
|
|
char ming[10]; //储存名字
|
|
|
char xingbie; //储存性别,f为女性,m为男性
|
|
|
char chusheng[8]; //储存出生年月,格式为yyyy.mm,若要设为隐私则输入****.**
|
|
|
int nianling; //储存年龄,根据出生年月来计算,00表示隐私
|
|
|
char dizhi[6]; //储存寝室号 格式为x(栋)-yyy
|
|
|
char dianhua[12]; //储存电话号码
|
|
|
char email[31]; //储存邮箱地址 若要设为隐私则输入*
|
|
|
};
|
|
|
#define size 10 //最多储存学生数
|
|
|
struct student stu[size]; //定义结构体数组
|
|
|
int i=0; //用于判断你是否为第一次运行程序
|
|
|
|
|
|
int main() {
|
|
|
int a;
|
|
|
while(1) { //开始循环
|
|
|
printf("|--------------------------|\n");
|
|
|
printf("|请输入一个数字选择以下功能|\n");
|
|
|
printf("| 输入1:录入学生信息 |\n");
|
|
|
printf("| 输入2:浏览学生信息 |\n");
|
|
|
printf("| 输入3:修改学生信息 |\n");
|
|
|
printf("| 输入4:查询学生信息 |\n");
|
|
|
printf("| 输入5:删除学生信息 |\n");
|
|
|
printf("| 输入6:对学生信息排序 |\n");
|
|
|
printf("| 输入7:关闭程序 |\n");
|
|
|
printf("|--------------------------|\n");
|
|
|
scanf("%d",&a);
|
|
|
fflush(stdin); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
switch(a) {
|
|
|
case 1:
|
|
|
system("cls"); //system("cls");清屏
|
|
|
luru();
|
|
|
break;
|
|
|
case 2:
|
|
|
system("cls");
|
|
|
liulan();
|
|
|
break;
|
|
|
case 3:
|
|
|
system("cls");
|
|
|
xiugai();
|
|
|
break;
|
|
|
case 4:
|
|
|
system("cls");
|
|
|
chaxun();
|
|
|
break;
|
|
|
case 5:
|
|
|
system("cls");
|
|
|
shanchu();
|
|
|
break;
|
|
|
case 6:
|
|
|
system("cls");
|
|
|
paixu();
|
|
|
break;
|
|
|
case 7:
|
|
|
return 0; //强行关闭程序
|
|
|
default: {
|
|
|
system("cls");
|
|
|
printf("警告!数据错误!请重新输入!\n");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
void chongxie() {
|
|
|
int j; //用于for循环
|
|
|
FILE *fp=fopen("student.txt","w+"); //更新学生信息储存文件
|
|
|
if(fp==NULL) //判断能否正常打开文件
|
|
|
printf("系统崩溃!");
|
|
|
for(j=0; j<student; j++)
|
|
|
fprintf(fp,"%s %s %c %s %d %s %s %s\n",stu[j].xuehao,stu[j].ming,stu[j].xingbie,stu[j].chusheng,stu[j].nianling,stu[j].dizhi,stu[j].dianhua,stu[j].email);
|
|
|
fclose(fp);
|
|
|
}
|
|
|
|
|
|
void luru() {
|
|
|
printf("|---------已加入录入程序----------|\n");
|
|
|
if(i==0) { //判断你是否为第一次打开
|
|
|
FILE *fp;
|
|
|
printf("由于你是第一次运行该程序,正在上传样本信息\n");
|
|
|
i++;
|
|
|
fp=fopen("f1.txt","r");
|
|
|
if(fp==NULL) //判断文件能否正常打开
|
|
|
printf("系统崩溃!\n");
|
|
|
while(!feof(fp)&&student<size) { //将文件中的信息一个个录入结构体,直到达到最大存储量
|
|
|
fscanf(fp,"%s %s %c %s %d %s %s %s",stu[student].xuehao,stu[student].ming,&stu[student].xingbie,stu[student].chusheng,&stu[student].nianling,stu[student].dizhi,stu[student].dianhua,stu[student].email);
|
|
|
student++; //学生数+1
|
|
|
}
|
|
|
fclose(fp); //关闭文件
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
return;
|
|
|
} else {
|
|
|
int c; //c=1则添加学生信息
|
|
|
printf("确定要录入新的学生信息?输入1选择是,否则选择退出程序\n");
|
|
|
scanf("%d",&c);
|
|
|
while(c==1) { //输入1添加学生信息
|
|
|
if(student==size) {
|
|
|
printf("数据已满!无法添加\n");
|
|
|
return;
|
|
|
} else {
|
|
|
printf("请输入11位学号\n");
|
|
|
scanf("%s",stu[student].xuehao); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
fflush(stdin);
|
|
|
printf("请输入学生姓名\n");
|
|
|
scanf("%s",stu[student].ming);
|
|
|
fflush(stdin);
|
|
|
printf("请输入该学生性别\n");
|
|
|
scanf("%c",&stu[student].xingbie);
|
|
|
fflush(stdin);
|
|
|
printf("请输入该学生出生年月\n");
|
|
|
scanf("%s",stu[student].chusheng);
|
|
|
printf("请输入该学生年龄\n");
|
|
|
scanf("%d",&stu[student].nianling);
|
|
|
printf("请输入该学生地址\n");
|
|
|
scanf("%s",stu[student].dizhi);
|
|
|
fflush(stdin);
|
|
|
printf("请输入该学生电话号码\n");
|
|
|
scanf("%s",stu[student].dianhua);
|
|
|
fflush(stdin);
|
|
|
printf("请输入该学生邮箱地址\n");
|
|
|
scanf("%s",stu[student].email);
|
|
|
fflush(stdin);
|
|
|
student++; //学生数+1
|
|
|
printf("是否继续录入新的学生信息?输入1选择是,否则选择退出程序\n");
|
|
|
scanf("%d",&c);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
chongxie(); //更新学生信息储存文件
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
void liulan() {
|
|
|
char g;
|
|
|
printf("|---------已进入浏览程序----------|\n");
|
|
|
int j; //用于for循环
|
|
|
printf("学号 姓名 性别 出生年月 年龄 地址 电话号码 E-mail邮箱\n"); //制表
|
|
|
for(j=0; j<student; j++) //以行为单位输出
|
|
|
printf("%s\t%s\t\t%c\t%s\t\t%d\t%s\t%s\t%s\n",stu[j].xuehao,stu[j].ming,stu[j].xingbie,stu[j].chusheng,stu[j].nianling,stu[j].dizhi,stu[j].dianhua,stu[j].email);
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
printf("|--------按任意键退出-------------|\n");
|
|
|
g=getchar(); //输入g程序结束
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
void xiugai() {
|
|
|
printf("|---------已进入修改程序----------|\n");
|
|
|
int a,j; //a用于功能选择,j用于for循环
|
|
|
char g;
|
|
|
printf("请输入要修改信息的学生的学号\n");
|
|
|
char x[12]; //储存学号
|
|
|
scanf("%s",x);
|
|
|
if(strlen(x)!=11) { //不是11位直接判定为格式错误,结束程序
|
|
|
printf("格式错误!\n");
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
return;
|
|
|
}
|
|
|
for(j=0; j<student; j++)
|
|
|
if(strcmp(x,stu[j].xuehao)==0) {
|
|
|
printf("已找到该同学,请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
while(scanf("%d",&a)!=EOF)
|
|
|
switch(a) {
|
|
|
case 1:
|
|
|
printf("请输入新的学号\n");
|
|
|
scanf("%s",stu[j].xuehao);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 2:
|
|
|
printf("请输入新的名字\n");
|
|
|
scanf("%s",stu[j].ming);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 3:
|
|
|
printf("请输入新的性别\n");
|
|
|
fflush(stdin); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
scanf("%c",&stu[j].xingbie);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 4:
|
|
|
printf("请输入新的出生年月\n");
|
|
|
scanf("%s",stu[j].chusheng);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 5:
|
|
|
printf("请输入新的年龄\n");
|
|
|
scanf("%d",&stu[j].nianling);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 6:
|
|
|
printf("请输入新的地址\n");
|
|
|
scanf("%s",stu[j].dizhi);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 7:
|
|
|
printf("请输入新的电话号码\n");
|
|
|
scanf("%s",stu[j].dianhua);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
case 8:
|
|
|
printf("请输入新的邮箱\n");
|
|
|
scanf("%s",stu[j].email);
|
|
|
printf("请输入\n1:修改学号\n2:修改姓名\n3:修改性别\n4:修改出生年月\n5:修改年龄\n6:修改地址\n7:修改电话号码\n8:修改邮箱\n其他:退出程序\n");
|
|
|
break;
|
|
|
default:
|
|
|
chongxie(); //更新学生信息储存文件
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
if(j==student) //说明查无此人
|
|
|
printf("查无此人!\n");
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
printf("|--------按任意键退出-------------|\n");
|
|
|
fflush(stdin);
|
|
|
g=getchar(); //输入g程序结束
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
void chaxun() {
|
|
|
printf("|---------已进入查询程序----------|\n");
|
|
|
int a,j; //a=1按学号查询,a=2按姓名查询,否则退出
|
|
|
char g;
|
|
|
char x[12]; //储存学号
|
|
|
char m[10]; //储存姓名
|
|
|
printf("输入1按学号查询,输入2按姓名查询\n");
|
|
|
scanf("%d",&a);
|
|
|
fflush(stdin); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
if(a==1) {
|
|
|
printf("请输入学号\n");
|
|
|
scanf("%s",x);
|
|
|
fflush(stdin); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
if(strlen(x)!=11) { //不是11位直接判定为格式错误,结束程序
|
|
|
printf("格式错误!\n");
|
|
|
return;
|
|
|
}
|
|
|
for(j=0; j<student; j++)
|
|
|
if(strcmp(x,stu[j].xuehao)==0) {
|
|
|
printf("学号 姓名 性别 出生年月 年龄 地址 电话号码 E-mail邮箱\n"); //制表
|
|
|
printf("%s\t%s\t\t%c\t%s\t\t%d\t%s\t%s\t%s\n",stu[j].xuehao,stu[j].ming,stu[j].xingbie,stu[j].chusheng,stu[j].nianling,stu[j].dizhi,stu[j].dianhua,stu[j].email);
|
|
|
break;
|
|
|
}
|
|
|
} else if(a==2) {
|
|
|
printf("请输入姓名\n");
|
|
|
scanf("%s",m);
|
|
|
fflush(stdin); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
for(j=0; j<student; j++)
|
|
|
if(strcmp(m,stu[j].ming)==0) {
|
|
|
printf("学号 姓名 性别 出生年月 年龄 地址 电话号码 E-mail邮箱\n"); //制表
|
|
|
printf("%s\t%s\t\t%c\t%s\t\t%d\t%s\t%s\t%s\n",stu[j].xuehao,stu[j].ming,stu[j].xingbie,stu[j].chusheng,stu[j].nianling,stu[j].dizhi,stu[j].dianhua,stu[j].email);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if(j==student) //说明查不到此人
|
|
|
printf("查无此人!\n");
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
printf("|--------按任意键退出-------------|\n");
|
|
|
g=getchar(); //输入g程序结束
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
void shanchu() {
|
|
|
printf("|---------已进入删除程序----------|\n");
|
|
|
int j,t; //用于for循环
|
|
|
char g;
|
|
|
char a[12]; //储存学号
|
|
|
printf("请输入要删除学生的学号\n");
|
|
|
scanf("%s",a);
|
|
|
fflush(stdin); //fflush(stdin);防止输入的回车键影响到数据输入
|
|
|
if(strlen(a)!=11) { //不是11位直接判定为格式错误,结束程序
|
|
|
printf("格式错误!\n");
|
|
|
return;
|
|
|
}
|
|
|
for(j=0; j<student; j++) //开始一个个查询
|
|
|
if(strcmp(a,stu[j].xuehao)==0) {
|
|
|
if(j!=student-1) {
|
|
|
for(t=j; t<student-1; t++) { //从后往前将要删除的同学信息覆盖
|
|
|
strcpy(stu[t].xuehao,stu[t+1].xuehao); //strcpy覆盖字符串
|
|
|
strcpy(stu[t].ming,stu[t+1].ming);
|
|
|
stu[t].xingbie=stu[t+1].xingbie;
|
|
|
strcpy(stu[t].chusheng,stu[t+1].chusheng);
|
|
|
stu[t].nianling=stu[t+1].nianling;
|
|
|
strcpy(stu[t].dizhi,stu[t+1].dizhi);
|
|
|
strcpy(stu[t].dianhua,stu[t+1].dianhua);
|
|
|
strcpy(stu[t].email,stu[t+1].email);
|
|
|
}
|
|
|
student--; //学生数-1
|
|
|
printf("成功删除该学生信息\n");
|
|
|
}
|
|
|
else {
|
|
|
j--; //如果该学生排在最后一个 ,删除会比较麻烦
|
|
|
student--; //学生数-1
|
|
|
printf("成功删除该学生信息\n");
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
if(j==student) //说明查无此人
|
|
|
printf("查无此人!\n");
|
|
|
else
|
|
|
chongxie(); //更新学生信息储存文件
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
printf("|--------按任意键退出-------------|\n");
|
|
|
g=getchar(); //输入g程序结束
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
void paixu() {
|
|
|
printf("|---------已进入排序程序----------|\n");
|
|
|
printf("正在排序请稍等\n");
|
|
|
int j,t,z,y; //j,z,y用于for循环,t用于交换年龄
|
|
|
char jiaohuan[50],xing,g; //jiaohuan[50]用于交换各种字符串,xing用于交换性别
|
|
|
for(j=0; j<student-1; j++)
|
|
|
for(z=j; z<student-1; z++) //以学号为标准,采用从上到下,从小到大方式替换
|
|
|
if(strcmp(stu[j].xuehao,stu[z+1].xuehao)>0) {
|
|
|
strcpy(jiaohuan,stu[j].xuehao);
|
|
|
strcpy(stu[j].xuehao,stu[z+1].xuehao);
|
|
|
strcpy(stu[z+1].xuehao,jiaohuan);
|
|
|
|
|
|
strcpy(jiaohuan,stu[j].ming);
|
|
|
strcpy(stu[j].ming,stu[z+1].ming);
|
|
|
strcpy(stu[z+1].ming,jiaohuan);
|
|
|
|
|
|
xing=stu[j].xingbie;
|
|
|
stu[j].xingbie=stu[z+1].xingbie;
|
|
|
stu[z+1].xingbie=xing;
|
|
|
|
|
|
strcpy(jiaohuan,stu[j].chusheng);
|
|
|
strcpy(stu[j].chusheng,stu[z+1].chusheng);
|
|
|
strcpy(stu[z+1].chusheng,jiaohuan);
|
|
|
|
|
|
t=stu[j].nianling;
|
|
|
stu[j].nianling=stu[z+1].nianling;
|
|
|
stu[z+1].nianling=t;
|
|
|
|
|
|
strcpy(jiaohuan,stu[j].dizhi);
|
|
|
strcpy(stu[j].dizhi,stu[z+1].dizhi);
|
|
|
strcpy(stu[z+1].dizhi,jiaohuan);
|
|
|
|
|
|
strcpy(jiaohuan,stu[j].dianhua);
|
|
|
strcpy(stu[j].dianhua,stu[z+1].dianhua);
|
|
|
strcpy(stu[z+1].dianhua,jiaohuan);
|
|
|
|
|
|
strcpy(jiaohuan,stu[j].email);
|
|
|
strcpy(stu[j].email,stu[z+1].email);
|
|
|
strcpy(stu[z+1].email,jiaohuan);
|
|
|
}
|
|
|
chongxie();
|
|
|
printf("排序完毕\n");
|
|
|
printf("|-----------程序结束--------------|\n");
|
|
|
printf("|--------按任意键退出-------------|\n");
|
|
|
g=getchar(); //输入g程序结束
|
|
|
system("cls");
|
|
|
return;
|
|
|
}
|