#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 40;
typedef struct node
{
int num;
char name[15];
int grade1;
int grade2;
int grade3;
double aver;
}STU;
void menu();
void stu_sort();
void stu_emptyfile();
void stu_openfile();
void stu_savefile();
void stu_readfile();
void stu_find();
void stu_insert();
void stu_del();
void stu_input();
void stu_update();
void stu_aver();
int n;
STU a[N], stdinfo[20];
FILE* fp;
int main()
{
int i=0,x=1;
while (1)
{
menu();
scanf("%d", &i);
switch (i)
{
case 0:
{
printf("退出系统");exit(0);
}
case 1:stu_input(); break;
case 2:stu_find(); break;
case 3:stu_del(); break;
case 4:stu_insert(); break;
case 5:stu_update();break;
case 6:stu_aver(); break;
case 7:stu_readfile();break;
default:printf("请输入0-7:");
}
}
return 0;
}
//菜单打印函数
void menu()
{
printf("----------------------------------------------------------\n");
printf(" |*******学生信息管理系统*******|\n");
printf("|1.创建学生信息 2.查询学生信息 3.删除学生信息 |\n");
printf("|4.插入学生信息 5.修改学生信息 6.输出不到60分学生|\n");
printf("|7.从文件读取数据 0.退出系统 |\n");
printf("----------------------------------------------------------\n");
}
//输入学生信息并输入学生个数
void stu_input()
{
printf("输入存入学生信息个数:");
scanf("%d", &n);
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
for (int i = 0; i < n; i++)
{
scanf("%d %s %d %d %d", &a[i].num, a[i].name, &a[i].grade1, &a[i].grade2, &a[i].grade3);
for (int j = 0; j < i; j++) {
if (a[i].num == a[j].num)
{
printf("学号相同,请重新输入");
scanf("%d %s %d %d %d", &a[i].num, a[i].name, &a[i].grade1, &a[i].grade2, &a[i].grade3);
}
}
}
stu_sort();
stu_openfile(); //创建表头
stu_savefile();
}
//查询学生信息
void stu_find()//查询学生信息
{
int i,x;
printf("使用学号查询请按1,使用姓名请按0:");
scanf("%d", &x);
if (x)
{ //学号查询的功能
int num = 0,flag=0;
printf("请输入所要查询学生的学号");
scanf("%d", &num);
for (i = 0; i < n; i++) {
if (a[i].num == num)
{
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
printf("%d \t%s \t%d \t%d \t%d\n", a[i].num, a[i].name, a[i].grade1, a[i].grade2, a[i].grade3);
flag = 1;//表示找到
}
}
if(!flag)
printf("没有找到对应学号学生\n");
}
else
{ //姓名查询的功能
char name[15];
int flag = 0;
printf("请输入所要查询学生的姓名");
scanf("%s", name);
for (i = 0; i < n; i++) {
if ((strcmp(a[i].name, name)) == 0)
{
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
printf("%d \t%s \t%d \t%d \t%d\n", a[i].num, a[i].name, a[i].grade1, a[i].grade2, a[i].grade3);
flag = 1;
}
}
if(!flag)
printf("没有找到对应姓名学生\n");
}
}
//删除学生信息
void stu_del()
{
int i = 0, j = 0, num = 0;
char ch;
printf("请输入要删除学员的学号:");
scanf("%d", &num);
//循环遍历找位置
for (i = 0; i < n; i++)
{
if (num == a[i].num)
{
j = i;
break;
}
}
if (i < n)
{
a[j] = a[n + 1]; //清除第i位的学生信息
n--; //实际人数自减一个
for (int i = j; i < n; i++) //移位把空缺位置补上
{
a[i] = a[i + 1];
}
printf("\n已删除\n");
stu_emptyfile();
stu_savefile();
}
else
{
printf("没有找到您要删除的学员学号,请重新选择功能!\n");
}
}
//插入学生信息
void stu_insert()
{
int i = 0, j = 0;
STU newStu;//定义实行插入功能时输入的类型
if (n >= 20) //学生信息大于等于20,不能插入
{
printf("空间已满不能继续插入信息");
exit(0);
}
do
{
printf("学号:");
scanf("%d", &newStu.num);
//
//循环遍历输入的学号是否重复
for (i = 0; i < n; i++)
{
if (a[i].num == newStu.num)
{
printf("\t学号重复,请重新输入!\n");
break;
}
}
} while (i < n);
//输入剩下所有信息
printf("输入姓名以及三科成绩");
scanf("%s %d %d %d", newStu.name, &newStu.grade1, &newStu.grade2, &newStu.grade3);
a[n] = newStu;
n++; //人数加一
stu_sort();//调用排序函数
//两函数组合更新文件内容
stu_emptyfile();
stu_savefile();
printf("信息插入完成\n");
}
//修改学生信息
void stu_update()
{
STU t, m;
printf("请输入要修改的学生学号:");
scanf("%d", &t.num);
for (int i = 0; i < n; i++)
{
if (t.num == a[i].num)
{
printf("请输入修改的学生学号姓名和三科成绩:\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
scanf("%d %s %d %d %d", &t.num, t.name, &t.grade1, &t.grade2, &t.grade3);
m = t;
t = a[i];
a[i] = m;
}
}
stu_sort();
//两函数组合更新文件内容
stu_emptyfile();
stu_savefile();
printf("修改完成\n");
}
//排序函数(按照由小到大升序排列)
void stu_sort()
{
int i = 0, j = 0;
STU temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j].num > a[j + 1].num)
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
printf("按学号排序完成\n");
return;
}
//输出平均分不到60分的学生信息
void stu_aver()
{
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
for (int i = 0; i < n; i++)
{
a[i].aver = (a[i].grade1 + a[i].grade2 + a[i].grade3) / 3.0;;
if (a[i].aver < 60)
{
printf("%d \t%s \t%d \t%d \t%d\n", a[i].num, a[i].name, a[i].grade1, a[i].grade2, a[i].grade3);
}
}
}
//清空文件
void stu_emptyfile()
{
fp = fopen("D:/student/file1.txt", "w+");
if (!fp)
{
printf("打开文件失败");
exit(0);
}
fclose(fp);
}
//给文件创建表头
void stu_openfile()
{
fp = fopen("D:/student/file1.txt", "r");
if (!fp) {
printf("不能打开文件");
exit(0);
}
fprintf(fp, "%s %s %s %s %s\n", "学号", "姓名", "成绩1", "成绩2", "成绩3");
fclose(fp);
}
//保存最新的数据
void stu_savefile()
{
fp = fopen("D:/student/file1.txt", "a");
if (!fp)
{
printf("不能打开文件");
exit(0);
}
for (int i = 0; i < n; i++)
{
fprintf(fp, "%d %s %d %d %d\n", a[i].num, a[i].name, a[i].grade1, a[i].grade2, a[i].grade3);
}
fclose(fp);
}
//读取文件数据
void stu_readfile()
{
fp = fopen("D:/student/file1.txt", "r");
if (!fp) {
printf("打开文件失败");
exit(0);
}
for (int i = 0; i < n; i++)
{
fscanf(fp, "%d %s %d %d %d", &stdinfo[i].num, stdinfo[i].name, &stdinfo[i].grade1, &stdinfo[i].grade2, &stdinfo[i].grade3);
}
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
for (int i = 0; i < n; i++)
{
printf("%d \t%s \t%d \t%d \t%d\n", stdinfo[i].num, stdinfo[i].name, stdinfo[i].grade1, stdinfo[i].grade2, stdinfo[i].grade3);
}
printf("读取成功\n");
//两函数组合更新文件内容
stu_emptyfile();
stu_savefile();
}
学生信息管理系统(做完大作业发一发自己的代码)
最新推荐文章于 2024-08-17 18:56:31 发布