Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 学生成绩管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
- #include "stdio.h"
- #include "stdlib.h"
- typedef int Status;
- typedef float Elemtype;
- constexpr auto ERROR = -1;
- constexpr auto OK = 0;
- int i = 1;
- constexpr auto N = 10000;
- int zong = 5;
- struct Student {
- char name[20];
- int num;
- int age;
- Elemtype Chinese;
- Elemtype math;
- Elemtype English;
- Elemtype Science;
- } stu[N] = { {"zhangsan",1000,18,120,115,130,279},
- {"lisi",1001,17,127,129,118,208} ,
- {"wangyi",1002,17,119,121,88,195},
- {"maliu",1003,17,97,149,108,198} };
- int main()
- {
- FILE *fp=NULL;
- void add(struct Student stu[], int weizhi, int nums);
- void del(struct Student stu[], int num);
- void list(struct Student stu[]);
- void find(struct Student stu[]);
- void change(struct Student stu[], int p);
- fopen_s(&fp, "data.bin", "rb");
- if (!feof(fp))
- {
- fread(&zong, sizeof(int), 1, fp);
- for (int i = 0; i < zong; i++) {
- fread(&stu[i], sizeof(Student), 1, fp);
- }
- }
- fclose(fp);
- printf("\t***********************************************\n");
- printf("\t\t 学生成绩管理系统\n");
- printf("\t说明:该系统可输入并存储学生姓名、学号、年龄、\n\t 语文、数学、英语、理综成绩。\n");
- printf("\t 初始状态下有5组数据,在宸哥的帮助下实现了\n\t 存盘功能,特此鸣谢\n");
- printf("\t 胡浩龙 版权所有 Copyright2019\n");
- printf("\t请根据以下提示操作:\n");
- fu:printf("\t************************************************\n");
- printf("\t\t输入1,增加学生。\n");
- printf("\t\t输入2,删除学生。\n");
- printf("\t\t输入3,修改学生成绩。\n");
- printf("\t\t输入4,查找学生。\n");
- printf("\t\t输入5,列出全部学生。\n");
- printf("\t\t输入6,回到主菜单。\n");
- printf("\t\t输入0,退出本系统。\n");
- printf("\t************************************************\n");
- int a;
- printf("\t\t请输入选项:");
- ck:printf("\t\t");
- scanf_s("%d", &a);
- switch (a)
- {
- case 1:printf("\n\t\t本次操作要加入的学生数量为:");
- int m, n;
- scanf_s("%d", &n);
- printf("\n\t\t加入到第几个学生后面:");
- scanf_s("%d", &m);
- add(stu, m, n);
- break;
- case 2:printf("\n\t\t请输入要删除学生的学号:");
- int b;
- scanf_s("%d", &b);
- del(stu, b);
- break;
- case 3:printf("\n\t\t请输入要更改成绩的学生学号:");
- int g;
- scanf_s("%d", &g);
- change(stu, g);
- break;
- case 4:find(stu);
- break;
- case 5:list(stu);
- break;
- case 6:printf("\n\t\t 欢迎回来!!\n");
- goto fu;
- case 0:
- fopen_s(&fp, "data.bin", "wb");
- fwrite(&zong, sizeof(int), 1, fp);
- for (int i = 0; i < zong; i++) {
- fwrite(&stu[i], sizeof(Student), 1, fp);
- }
- fclose(fp);
- return 0;
- }
- printf("\n\t\t本次操作已经完成,请继续输入:\n");
- goto ck;
- }
- void add(struct Student stu[], int weizhi, int nums)
- { int flag=0;
- if(weizhi>zong)
- {
- printf("\t\t输入有误!!");
- flag = 1;
- }
- if (flag == 0)
- {
- for (int i = zong+nums; i >=weizhi ; i--)
- {
- stu[i+nums] = stu[i];
- }
- for (int i = weizhi; i < weizhi + nums; i++)
- {
- printf("\t\t请输入名字:");
- scanf_s("%s", stu[i].name, 20);
- int a = 1, temp;
- k:printf("\t\t请输入学号:");
- scanf_s("%d", &temp);
- while (a)
- {
- for (int j = 0; j <= weizhi; j++)
- {
- if (stu[j].num == temp)
- {
- printf("\t\t学号重复了!!\n");
- goto k;
- }
- else
- {
- a = 0;
- }
- }
- stu[i].num = temp;
- }
- printf("\t\t请输入学生年龄:");
- scanf_s("%d", &stu[i].age);
- printf("\t\t请依次输入各科成绩:");
- scanf_s("%f%f%f%f", &stu[i].Chinese, &stu[i].math, &stu[i].English, &stu[i].Science);
- }
- zong = zong + nums;
- }
- else
- {
- printf("\n");
- }
- }
- void del(struct Student stu[], int num)
- {
- if(zong==0)
- {
- printf("\t\t目前系统中没有数据!\n");
- }
- int temp = 0;
- for (int i = 0; i < zong; i++)
- {
- if (stu[i].num==num)
- {
- for (int j = i; j < zong; j++)
- {
- stu[j] = stu[j + 1];
- }
- printf("\t\t已完成删除操作!\n");
- temp = 1;
- zong = zong - 1;
- break;
- }
- }
- if (temp == 0)
- printf("\t\t 输入学号有误!!");
- }
- void list(struct Student stu[])
- {
- for (int i = 0; i < zong; i++)
- {
- printf("\n");
- printf("\t\t姓名:%s ", stu[i].name);
- printf("学号:%d ", stu[i].num);
- printf("年龄:%d \n ",stu[i].age);
- printf(" \t\t成绩为:语文%.2f分,数学%.2f分,英语%.2f分,理综%.2f分\n",stu[i].Chinese,stu[i].math,stu[i].English,stu[i].Science);
- }
- }
- void find(struct Student stu[])
- {
- int flag = 0, a;
- printf("\t\t请输入学生的学号:");
- scanf_s("%d", &a);
- for (int i = 0; i < zong; i++)
- {
- if (stu[i].num == a)
- {
- printf("\n\t\t学号为%d的学生叫做%s,他的成绩如下:\n", stu[i].num, stu[i].name);
- printf("\t\t语文%.2f分,数学%.2f分,英语%.2f分,理综%.2f分\n", stu[i].Chinese, stu[i].math, stu[i].English, stu[i].Science);
- flag = 1;
- break;
- }
- }
- if (flag==0)
- {
- printf("\t\t输入学号不存在!!\n");
- }
- }
- void change(struct Student stu[], int p)
- {
- int flag = 0;
- for (int i = 0; i < zong; i++)
- {
- if (stu[i].num == p)
- {
- next:printf("\t\t更改语文成绩请输入1\n");
- printf("\t\t更改数学成绩请输入2\n");
- printf("\t\t更改英语成绩请输入3\n");
- printf("\t\t更改理综成绩请输入4\n");
- int d;
- printf("\t\t");
- scanf_s("%d", &d);
- switch (d)
- {
- case 1: printf("\t\t当前该同学语文成绩为%.2f,请输入更改后成绩:", stu[i].Chinese);
- float u;
- scanf_s("%f", &u);
- stu[i].Chinese = u;
- printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
- flag = 1;
- int y1;
- scanf_s("\n\t\t%d", &y1);
- if (y1==1)
- {
- goto next;
- }
- else break;
- case 2: printf("\t\t当前该同学数学成绩为%.2f,请输入更改后成绩:", stu[i].math);
- float s;
- scanf_s("%f", &s);
- stu[i].math = s;
- printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
- flag = 1;
- int y2;
- scanf_s("\n\t\t%d", &y2);
- if (y2 == 1)
- {
- goto next;
- }
- else break;
- case 3: printf("\t\t当前该同学英语成绩为%.2f,请输入更改后成绩:", stu[i].English);
- float u1;
- scanf_s("%f", &u1);
- stu[i].English = u1;
- printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
- flag = 1;
- int y3;
- scanf_s("\n\t\t%d", &y3);
- if (y3 == 1)
- {
- goto next;
- }
- else break;
- case 4: printf("\t\t当前该同学理综成绩为%.2f,请输入更改后成绩:", stu[i].Science);
- float u2;
- scanf_s("%f", &u2);
- stu[i].Science = u2;
- printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
- flag = 1;
- int y4;
- scanf_s("\n\t\t%d", &y4);
- if (y4 == 1)
- {
- goto next;
- }
- else break;
- }
- }
- }
- if (flag == 0)
- printf("\n\t\t输入学号有误!!");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement