void modify() //修改学生信息
{
int flag, age, num, i;
char number[100], sex[10];
float score1, score2, score3;
char s1[100];
printf("请输入需要修改的学生姓名:\n");
getchar();
gets(s1);
while (1)
{
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(s1, stu[i].name) == 0)
{
flag = 1;
printf("***************************************************\n");
printf("*----1.修改学号-------- - -----2.修改性别-------*\n");
printf("*----3.修改年龄-------- - -----4.修改C语言成绩--*\n");
printf("*----5.修改高数成绩---- - -----6.修改英语成绩---*\n");
printf("*-------------------7.退出本菜单------------------*\n");
printf("***************************************************\n\n");
printf("请输入菜单编号:\n");
scanf("%d", &num);
switch (num)
{
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("请输入C语言成绩:\n");
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("请输入1--7之间的数字!\n");
}
if (num > 0 && num < 8)
printf("修改成功!\n");
break;
}
}
if (flag == 0)
{
printf("未找到该学生,请重新输入学生姓名:\n");
gets(s1);
}
}
system("pause");
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 50
void menu();
void help();
void increase();
void search();
void dlt();
void save();
void display();
void modify();
void flush();
void exit();
int n = 0, t = 1; //n为总人数,t控制循环
struct STU {
char num[100]; //学号
char name[100]; //姓名
char sex[10]; //性别
int age; //年龄
float score[3]; //成绩*3
}stu[N];
int main()
{
int number;
while (t)
{
menu();
printf("请输入菜单编号:");
scanf("%d", &number);
switch (number)
{
case 1:help(); break; //使用帮助
case 2:increase(); break; //增加学生信息
case 3:search(); break; //查询学生信息
case 4:dlt(); break; //删除学生信息
case 5:save(); break; //保存当前信息
case 6:display(); break; //显示当前信息
case 7:modify(); break; //修改学生信息
case 8:flush(); break; //刷新学生信息
case 9:exit(0); break; //退出
default:printf("输入有误!");
}
}
}
void menu() //显示菜单
{
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() //使用帮助
{
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、使用遇到任何问题请与我们联系,电话:12345678\n");
printf("\n 10、最后感谢您的使用!\n");
system("pause"); //让系统暂停
}
void increase() //增加学生信息
{
int m, flag, i = n, j;
printf("请输入待添加的学生人数:\n");
scanf("%d", &m);
if (m > 0)
{
do
{
flag = 1;
while (flag != 0)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);
getchar();
gets(stu[i].num);
for (j = 0; j < i; j++)
{
if (strcmp(stu[i].num, stu[j].num) == 0)
{
printf("该学号已存在,请重新输入!\n");
flag = 1;
break;
}
}
}
printf("请输入第%d位学生姓名:\n", i + 1);
gets(stu[i].name);
printf("请输入第%d位学生性别:\n", i + 1);
gets(stu[i].sex);
printf("请输入第%d位学生年龄:\n", i + 1);
scanf("%d", &stu[i].age);
printf("请输入第%d位学生C语言成绩:\n", i + 1);
scanf("%f", &stu[i].score[0]);
printf("请输入第%d位学生高等数学成绩:\n", i + 1);
scanf("%f", &stu[i].score[1]);
printf("请输入第%d位学生大学英语成绩:\n", i + 1);
scanf("%f", &stu[i].score[2]);
i++;
} while (i < m + n);
n += m;
printf("添加完成!");
system("pause");
}
}
void search() //查询学生信息
{
int number, flag, i;
char s1[100];
printf("*****************************\n");
printf("**-------1.按学号查询------**\n");
printf("**-------2.按姓名查询------**\n");
printf("**-------3.退出本菜单------**\n");
printf("*****************************\n");
while (1)
{
flag = 0;
printf("请输入要执行的操作序号:\n");
scanf("%d", &number);
switch (number)
{
case 1:
printf("请输入需要查找学生的学号:\n");
scanf("%s",s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].num, s1) == 0)
{
flag = 1;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", 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 (i = 0; i < n; i++)
{
if (strcmp(stu[i].name, s1) == 0)
{
flag = 1;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", 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("请在1--3之间输入!\n");
}
if (flag == 0)
printf("找不到该学生,请重新输入!\n");
}
}
void dlt() //删除信息
{
int flag, i, j;
char s1[100];
printf("请输入要删除学生的学号:\n");
getchar();
gets(s1);
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].num, s1) == 0)
{
flag = 1;
for (j = i; j < n - 1; j++)
{
stu[j] = stu[j + 1];
}
}
if (flag == 1) break;
}
if (flag == 0) printf("未找到该学生!\n");
if (flag == 1)
{
printf("删除成功!\n");
n--;
}
system("pause");
}
void save() //保存学生信息
{
FILE* fp;
char filename[100];
int i;
printf("请输入要保存的文件名:\n");
scanf("%s", filename);
if ((fp = fopen(filename, "w")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < n; i++)
{
if (fwrite(&stu[i], sizeof(struct STU), 1, fp) != 1)
printf("保存失败!\n");
}
printf("保存成功!\n");
fclose(fp);
system("pause");
}
void display() //显示当前信息
{
int i;
if (n == 0)
printf("您好,现在暂无学生信息,请先添加学生信息!\n");
else
{
printf("现在共有%d名学生\n", n);
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
for (i = 0; i < n; i++)
{
printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
system("pause");
}
void modify() //修改学生信息
{
int flag, age, num, i;
char number[100], sex[10];
float score1, score2, score3;
char s1[100];
printf("请输入需要修改的学生姓名:\n");
getchar();
gets(s1);
while (1)
{
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(s1, stu[i].name) == 0)
{
flag = 1;
printf("***************************************************\n");
printf("*----1.修改学号-------- - -----2.修改性别-------*\n");
printf("*----3.修改年龄-------- - -----4.修改C语言成绩--*\n");
printf("*----5.修改高数成绩---- - -----6.修改英语成绩---*\n");
printf("*-------------------7.退出本菜单------------------*\n");
printf("***************************************************\n\n");
printf("请输入菜单编号:\n");
scanf("%d", &num);
switch (num)
{
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("请输入C语言成绩:\n");
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("请输入1--7之间的数字!\n");
}
if (num > 0 && num < 8)
printf("修改成功!\n");
break;
}
}
if (flag == 0)
{
printf("未找到该学生,请重新输入学生姓名:\n");
gets(s1);
}
}
system("pause");
}
void flush() //刷新学生信息
{
FILE* fp;
char filename[100];
int i, k = 0;
printf("请输入需要刷新的文件名:\n");
getchar();
gets(filename);
if ((fp = fopen(filename, "r")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < N; i++)
{
if (fread(&stu[i], sizeof(struct STU), 1, fp) == 1)
{
k++;
}
}
n = k;
if (k == 0) printf("刷新失败!\n");
else printf("刷新成功!\n");
fclose(fp);
system("pause");
}