#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<time.h>
#define MAX_INDEX 100
typedef struct
{
char id[20];
char name[20];
char sex[5];
int age;
}STU;
void return_menau();
void print_menau();
int select_menau();
int get_student_info(STU stu[]);
void ls_info(STU stu[],int n);
void search_info_by_name(STU stu[],int n);
void search_info_by_id(STU stu[],int n);
void change_info_by_id(STU stu[],int n);
int del_by_id(STU stu[],int n);
int add_info(STU stu[],int n);
void save_info(STU stu[], int n);
void load_info(STU stu[], int n);
int find_name(STU stu[],int n,char *s);
int find_id(STU stu[],int n,char *s);
void guess_student(STU stu[],int n);
void return_menau()
{
char mistake[20];
printf("按回车键返回主菜单...\n");
gets(mistake);
return;
}
void print_menau()
{
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(" 9. 从文件加载学生信息\n");
printf(" 10. 小游戏:根据学号猜学生\n");
printf(" 11. 退出程序\n");
printf("###################################\n");
return;
}
int select_menau()
{
print_menau();
printf("\n请输入你要选择的编号(1-10): ");
int your_input;
while(1)
{
scanf("%d",&your_input);
getchar();
if(your_input>10 || your_input<1)
{
system("cls");
print_menau();
printf("\n你输入的编号无效,请重新输入:");
continue;
}
else
break;
}
return your_input;
}
int get_student_info(STU stu[])
{
int i,n;
system("cls");
printf("\n请输入你要记录的学生的数量\n");
scanf("%d",&n);
system("cls");
printf("请输入%d位学生的信息:\n",n);
printf("请按以下顺序进行学生信息的输入\n");
printf("学号 姓名 性别 年龄\n");
for(i=0;i<n;i++)
{
scanf("%s",stu[i].id);
scanf("%s",stu[i].name);
scanf("%s",stu[i].sex);
scanf("%d",&stu[i].age);
getchar();
if(i!=n-1)
printf("学号 姓名 性别 年龄\n");
}
printf("信息正在录入...\n");
sleep(2);
printf("你输入的信息已录入系统...\n");
if(i==n)
{
printf("信息全部录入了哈!");
}
else
{
printf("你输入的多了或者少了哦!老铁");
}
return n;
}
void ls_info(STU stu[],int n)
{
int i;
system("cls");
if(n == 0)
{
printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
return;
}
printf("\n##################学生清单##################\n");
printf("学号 姓名 性别 年龄\n");
printf("\n############################################\n");
for(i=0;i<n;i++)
{
printf("%-14s%-14s%-14s%-14d\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age);
if ((i + 1) % 10 == 0)
{
printf("---------------------------------------------\n");
printf("每次显示10个学生的信息,按回车继续获得剩下的...\n");
getchar();
system("cls");
printf("\n*******************学生清单*******************\n");
printf("学号 姓名 性别 年龄\n");
printf("---------------------------------------------\n");
}
}
printf("\n");
return;
}
void search_info_by_name(STU stu[],int n)
{
char temp[20];
int i;
system("cls");
if(n==0)
{
printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
return;
}
printf("请输入查找的学生的名字:\n");
scanf("%s", temp);
getchar();
i = find_name(stu, n, temp);
if(i > n - 1)
{
printf("没有名字为%s的学生..\n",temp);
}
else
{
printf("嗱!这是你要的!\n");
printf("%s\n",stu[i].id);
printf("%s\n",stu[i].name);
printf("%s\n",stu[i].sex);
printf("%d\n",stu[i].age);
}
return;
}
void search_info_by_id(STU stu[],int n)
{
system("cls");
if(n == 0)
{
printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
return;
}
char s[20];
printf("请输入你要查询的学生的学号:\n");
scanf("%s",s);
int flag = 0;
for(int i=1;i<=n;i++)
{
if(strcmp(stu[i].name,s)==0)
{
flag = 1;
printf("嗱!这是你要的!\n");
printf("%s\n",stu[i].id);
printf("%s\n",stu[i].name);
printf("%s\n",stu[i].sex);
printf("%d\n",stu[i].age);
}
}
if(!flag)
{
printf("你要查询的学号为%s的学生不存在!\n",s);
}
return;
}
void change_info_by_id(STU stu[],int n)
{
if(n == 0)
{
printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
return;
}
system("cls");
char s[20];
int i;
printf("请输入你要修改的学生的想学号:\n");
scanf("%s",s);
i = find_id(stu, n, s);
if(i == n)
{
printf("没有找到学号为%s的学生哇!\n",s);
}
else
{
printf("学号为%s的学生信息修改前为:\n",s);
printf("%s\n",stu[i].id);
printf("%s\n",stu[i].name);
printf("%s\n",stu[i].sex);
printf("%d\n",stu[i].age);
printf("\n");
printf("请输入要修改的信息:\n");
printf("学号 姓名 性别 年龄\n");
scanf("%s", stu[i].id);
scanf("%s", stu[i].name);
scanf("%s", stu[i].sex);
scanf("%d", &stu[i].age);
getchar();
}
system("cls");
printf("正在修改学号为%s的学生的信息...\n",s);
sleep(2);
system("cls");
printf(" 修改成功\n");
printf("修改后的信息为:\n");
printf("%s\n",stu[i].id);
printf("%s\n",stu[i].name);
printf("%s\n",stu[i].sex);
printf("%d\n",stu[i].age);
return;
}
int del_by_id(STU stu[],int n)
{
char s[20];
int i;
system("cls");
if(n == 0)
{
printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
return n;
}
printf("请输入你要删除的学生的学号:\n");\
scanf("%s",s);
getchar();
i = find_name(stu, n ,s);
if(i==n)
{
printf("没有找到学号为%s的学生哇!\n", s);
}
else
{
printf("正在删除学号为%s的学生...\n",s);
sleep(2);
for(;i<n;i++)
{
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i].id,stu[i+1].id);
strcpy(stu[i].sex, stu[i + 1].sex);
stu[i].age = stu[i + 1].age;
}
n--;
printf("删除成功了哈!\n");
}
return n;
}
int add_info(STU stu[],int n)
{
system("cls");
if(n == 0)
{
printf("系统中暂无学生信息哦!\n请你先录入学生信息或者从文件读一波学生信息吧!");
return n;
}
STU temp;
int i;
char s[20];
printf("请输入你想要增加的学生的信息:\n");
printf(" 学号 姓名 性别 年龄\n");
scanf("%s", temp.id);
scanf("%s", temp.name);
scanf("%s", temp.sex);
scanf("%d", &temp.age);
getchar();
if(n>0)
{
printf("请输入你想要查到哪个学生的后面,输入ta的姓名哈:\n");
scanf("%s",s);
getchar();
i = find_name(stu, n , s);
}
else
{
i = 0;
}
printf("正在插入学生信息...");
for(int j=n-1;j>=i;j--)
{
strcpy(stu[i + 1].id, stu[i].id);
strcpy(stu[i + 1].name, stu[i].name);
strcpy(stu[i + 1].sex, stu[i].sex);
stu[i + 1].age = stu[i].age;
}
strcpy(stu[i].id, temp.id);
strcpy(stu[i].name, temp.name);
strcpy(stu[i].sex, temp.sex);
stu[i].age = temp.age;
n++;
printf("此学生信息插入成功!\n");
return n;
}
void save_info(STU stu[], int n)
{
system("cls");
int i;
FILE *fp;
if((fp = fopen("D://学生信息管理系统.txt","wb")) == NULL)
{
printf("无法打开学生信息系统文件!\n");
exit(1);
}
printf("\n正在保存...\n");
fprintf(fp, "%d", n);
fprintf(fp, "\r\n");
for(i=0;i<n;i++)
{
fprintf(fp,"%-14s%-14s%-14s%-14d", stu[i].id, stu[i].name, stu[i].sex, stu[i].age);
fprintf(fp, "\n");
}
fclose(fp);
sleep(1);
system("cls");
printf("保存成功!\n");
return ;
}
void load_info(STU stu[])
{
int i,n;
FILE *fp;
if ((fp = fopen("D://学生信息管理系统.txt", "rb")) == NULL)
{
printf("无法打开学生信息系统文件!\n");
exit(1);
}
fscanf(fp, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fp, "%14s%14s%14s%14d", stu[i].id, stu[i].name, stu[i].sex, &stu[i].age);
fclose(fp);
printf("成功加载学生信息!\n");
return ;
}
int find_name(STU stu[],int n,char *s)
{
int i = 0;
for(i=0;i<n;i++)
{
if(strcmp(s,stu[i].name) == 0)
return i;
}
return i;
}
int find_id(STU stu[],int n,char *s)
{
int i = 0;
for(i=0;i<n;i++)
{
if(strcmp(s,stu[i].id) == 0)
return i;
}
return i;
}
void guess_student(STU stu[],int n)
{
srand(time(NULL));
int random_number = int(rand()%n);
printf("%d\n",random_number);
printf("请你猜一下学号为%s的同学是谁\n",stu[random_number].id);
printf("请输入0或1并敲回车,0表示揭晓答案,1表示继续猜,2表示不玩了\n");
int choice;
scanf("%d",&choice);
getchar();
if(choice==0)
printf("%s\n", stu[random_number].name);
else if(choice==1)
{
guess_student(stu,n);
}
else
{
return;
}
}
int main(int argc, char const *argv[])
{
STU stu[MAX_INDEX];
int len = 0;
while(1)
{
system("cls");
switch(select_menau())
{
case 1:
len = get_student_info(stu);
break;
case 2:
ls_info(stu,len);
break;
case 3:
search_info_by_name(stu,len);
break;
case 4:
search_info_by_id(stu,len);
break;
case 5:
len = del_by_id(stu,len);
break;
case 6:
change_info_by_id(stu,len);
break;
case 7:
len = add_info(stu,len);
break;
case 8:
save_info(stu,len);
break;
case 9:
load_info(stu);
break;
case 10:
guess_student(stu,len);
break;
case 11:
exit(0);
break;
}
return_menau();
}
return 0;
}