//学生管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 50
void menu();
void help();
void next();
void add_student();
void search_student();
void delete_student();
void display_student();
void modify_student();
void save_student();
void flush_student();
int peo_num = 0;
typedef struct STU
{
char num[100]; //学号
char name[100]; //姓名
char sex[10]; //性别
int age; //年龄
float score[3]; //成绩
}student;
student stu[N];
int main()
{
int number = 0;
while(1)
{
menu();
printf("请输入菜单编号:");
scanf("%d", &number);
switch(number)
{
case 1: help(); break; //使用帮助
case 2: add_student(); break; //添加学生
case 3: search_student(); break; //查询学生
case 4: delete_student(); break; //删除学生
case 5: save_student(); break; //保存学生
case 6: display_student();break; //展示所有学生
case 7: modify_student(); break; //修改学生信息
case 8: flush_student(); break; //刷新学生信息
case 9: exit(0); break; //退出
default: next(); break;
}
}
}
void menu() //显示菜单
{
system("cls");
printf("\n");
printf("********************************************************************************************\n");
printf("* 学生信息管理系统 *\n");
printf("********************************************************************************************\n");
printf("****************************************系统功能菜单****************************************\n");
printf("--------------------------------------------------------------------------------------------\n");
printf("********************************************************************************************\n");
printf("**** 1、使用帮助 **** 2、增加学生信息 ****\n");
printf("********************************************************************************************\n");
printf("**** 3、查询学生信息 **** 4、删除学生信息 ****\n");
printf("********************************************************************************************\n");
printf("**** 5、保存当前信息 **** 6、显示当前信息 ****\n");
printf("********************************************************************************************\n");
printf("**** 7、修改学生信息 **** 8、刷新学生信息 ****\n");
printf("********************************************************************************************\n");
printf("**** 9、退出系统 **** ====》待开发模块《==== ****\n");
printf("********************************************************************************************\n");
printf("--------------------------------------------------------------------------------------------\n");
}
//使用帮助
void help()
{
system("cls");
printf("\n 这是一个学生管理系统,为方便您更快了解它,请先阅读以下注意事项: \n");
printf("\n 注意事项: \n");
printf("\n 1、请根据提示进行操作! \n");
printf("\n 2、初次使用请先选择增加学生信息! \n");
printf("\n 3、修改或者增加学生信息后切记保存! \n");
printf("\n 4、如果数据有错误,请先修改再保存! \n");
printf("\n 5、若您之前使用过,下次进入系统请先刷新学生信息! \n");
printf("\n 6、在添加学生时,用两个字符代表不同的性别,比如男用‘M’代替,女用‘W’代替!\n");
printf("\n 7、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");
printf("\n “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");
printf("\n 该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败! \n");
printf("\n 8、学生信息包括:姓名、学号、性别、年龄、C语言成绩、高数成绩、英语成绩等! \n");
printf("\n 9、使用遇到任何问题请与我们联系,电话:110、119、120\n");
printf("\n 10、最后感谢您的使用! \n");
system("pause"); //让系统暂停
}
//待开发模块
void next()
{
system("cls");
printf("\n");
printf("********************************************************************************************\n");
printf("**** ====》此模块待开发《==== ****\n");
printf("********************************************************************************************\n");
system("pause"); //让系统暂停
}
//增加学生
void add_student()
{
int m; //添加人员数
printf("\n请输入待添加的学生人数:");
scanf("%d", &m);
int j = 1;
while(m--)
{
int flag = 1; //用于判断学号是不是重复的标志位 如果重复则会重新输入
printf("%d\n", peo_num);
while(flag != 0)
{
flag = 0;
printf("\n请输入第%d位学生的学号:", j);
scanf("%s", &stu[peo_num].num); //用gets可以输入空格 这里必须有值0-9
for(int k = 0; k < peo_num; k++)
{
if(strcmp(stu[peo_num].num, stu[k].num) == 0)
{
printf("\n该学号已存在,请重新输入!!\n");
flag = 1;
break;
}
}
}
printf("\n请输入第%d位学生的姓名:", j);
getchar(); //第一次使用gets时需要清空缓存
// fflush(stdin); //第一次使用gets时需要清空缓存
gets(stu[peo_num].name);
printf("\n请输入第%d位学生的性别:", j);
gets(stu[peo_num].sex);
printf("\n请输入第%d位学生的年龄:", j);
scanf("%d", &stu[peo_num].age);
printf("\n请输入第%d位学生C语言成绩:", j);
scanf("%f", &stu[peo_num].score[0]);
printf("\n请输入第%d位学生高等数学成绩:", j);
scanf("%f", &stu[peo_num].score[1]);
printf("\n请输入第%d位学生大学英语成绩:", j);
scanf("%f", &stu[peo_num].score[2]);
j++;
peo_num++;
}
printf("添加成功!");
system("pause");
}
//查询学生信息
void search_student()
{
system("cls");
int label = 0; //查询标签
char s1[100]; //查询输入的信息
printf("********************************************************************************************\n");
printf("*-------------------------------------1、按学号查询----------------------------------------*\n");
printf("*-------------------------------------2、按姓名查询----------------------------------------*\n");
printf("*-------------------------------------3、退出本菜单----------------------------------------*\n");
printf("********************************************************************************************\n");
while(1)
{
int flag = 0;
printf("\n请输入要执行的操作序号:");
scanf("%d", &label);
switch(label)
{
case 1:
printf("\n请输入要查询的学号:");
scanf("%s", s1);
if(strlen(s1) == 0) break;
for(int i = 0; i < peo_num; i++)
{
if(strcmp(stu[i].num, s1) == 0)
{
flag = 1;
printf("\n学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语");
printf("\n%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
break;
case 2:
printf("\n请输入要查询的姓名:");
scanf("%s", s1);
for(int i = 0; i < peo_num; i++)
{
if(strcmp(stu[i].name, s1) == 0)
{
flag = 1;
printf("\n学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语");
printf("\n%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
break;
case 3: return ;
default : printf("\n请在1---3之间输入!");break;
}
if(flag == 0)
printf("\n找不到该学生,请检查后重新输入!!");
}
}
//删除学生
void delete_student()
{
char s1[100];
printf("\n请输入要删除的学号:");
scanf("%s", s1);
int flag = 0;
for(int i = 0; i < peo_num; i++)
{
if(strcmp(stu[i].num, s1) == 0)
{
flag = 1;
for(int j = i; j < peo_num - 1; j++)
{
stu[j] = stu[j+1];
}
}
if(flag == 1) break;
}
if(flag == 0)
printf("\n未找到该学生!");
if(flag == 1)
{
printf("\n删除成功!!");
memset(&stu[peo_num], 0, sizeof(student));
peo_num--;
}
system("pause");
}
//展示所有学生信息
void display_student()
{
if(peo_num == 0)
printf("\n现在暂无学生信息,请先添加学生信息!");
else
{
printf("\n班级一共有%d名学生", peo_num);
printf("\n学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语");
for(int i = 0; i < peo_num; i++)
{
printf("\n%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
printf("\n");
}
system("pause");
}
//修改学生信息
void modify_student()
{
char s1[100];
int laber = 0;
int flag, age, num, i;
char number[100], sex[10];
int score1, score2, score3;
printf("\n请输入需要修改学生姓名:");
getchar();
gets(s1);
while(1)
{
int flag = 0;
for(int i = 0; i < peo_num; i++)
{
if(strcmp(stu[i].name, s1) == 0)
{
flag = 1;
system("cls");
printf("********************************************************************************************\n");
printf("*--------------1、修改学号------------------------------------ 2、修改性别-----------------*\n");
printf("*--------------3、修改年龄------------------------------------ 4、修改C语言成绩------------*\n");
printf("*--------------5、修改高数成绩-------------------------------- 6、修改英语成绩-------------*\n");
printf("*---------------------------------------7、退出菜单----------------------------------------*\n");
printf("********************************************************************************************\n");
printf("\n请输入菜单编号:");
scanf("%d", &laber);
switch(laber)
{
case 1:
printf("\n请输入新学号:");
getchar();
gets(number);
strcpy(stu[i].num, number);
break;
case 2:
printf("\n请输入性别:");
getchar();
gets(sex);
strcpy(stu[i].sex, sex);
break;
case 3:
printf("\n请输入年龄:");
scanf("%d", &age);
stu[i].age = age;
break;
case 4:
printf("\n请输入C语言成绩:");
scanf("%f", &score1);
stu[i].score[0] = score1;
break;
case 5:
printf("\n请输入高数成绩:");
scanf("%f", &score2);
stu[i].score[1] = score2;
break;
case 6:
printf("\n请输入英语成绩:");
scanf("%f", &score3);
stu[i].score[2] = score3;
break;
case 7:return;
default:printf("\n请输入1--7之间的数字!");
}
if(laber > 0 && laber < 8)
printf("\n修改成功\n");
break;
}
}
if(flag == 0)
{
printf("\n未找到该学生,请重新输入需要修改学生姓名:");
getchar();
gets(s1);
}
}
}
//保存学生信息
void save_student()
{
FILE *fp;
char filename[100];
printf("\n请输入要保存的文件名:");
scanf("%s", filename);
if((fp = fopen(filename, "w+")) == NULL)
{
printf("\n打开文件失败!\n");
exit(0);
}
for(int i = 0; i < peo_num; i++)
{
if(fwrite(&stu[i], sizeof(struct STU), 1, fp) != 1)
printf("\n保存失败!\n");
}
printf("\n保存成功!\n");
fclose(fp);
system("pause");
}
//刷新学生信息
void flush_student()
{
FILE* fp;
char filename[100];
int k = 0;
printf("\n请输入需要刷新的文件名:");
getchar();
gets(filename);
if ((fp = fopen(filename, "r+")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (int i = 0; i < N; i++)
{
if (fread(&stu[i], sizeof(student), 1, fp) == 1)
{
k++;
}
}
peo_num = k;
if (k == 0)
printf("刷新失败!\n");
else
printf("刷新成功!\n");
fclose(fp);
system("pause");
}
版权声明:本文为qq_41301428原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。