You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pa63emhpl/学生管理系统.ncb

374 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}