Advertisement
Guest User

学生成绩管理系统

a guest
Mar 24th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.36 KB | None | 0 0
  1. // 学生成绩管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. typedef int Status;
  5. typedef float Elemtype;
  6. constexpr auto ERROR = -1;
  7. constexpr auto OK = 0;
  8. int i = 1;
  9. constexpr auto N = 10000;
  10. int zong = 5;
  11.  struct Student {
  12.     char name[20];
  13.     int num;
  14.     int age;
  15.     Elemtype Chinese;
  16.     Elemtype math;
  17.     Elemtype English;
  18.     Elemtype Science;
  19.  } stu[N] = { {"zhangsan",1000,18,120,115,130,279},
  20.               {"lisi",1001,17,127,129,118,208} ,
  21.               {"wangyi",1002,17,119,121,88,195},
  22.               {"maliu",1003,17,97,149,108,198} };
  23. int main()
  24. {
  25.     FILE *fp=NULL;
  26.     void add(struct Student stu[], int weizhi, int nums);
  27.     void del(struct Student stu[], int num);
  28.     void list(struct Student stu[]);
  29.     void find(struct Student stu[]);
  30.     void change(struct Student stu[], int p);
  31.     fopen_s(&fp, "data.bin", "rb");
  32.     if (!feof(fp))
  33.     {
  34.         fread(&zong, sizeof(int), 1, fp);
  35.         for (int i = 0; i < zong; i++) {
  36.             fread(&stu[i], sizeof(Student), 1, fp);
  37.         }
  38.     }
  39.     fclose(fp);
  40.     printf("\t***********************************************\n");
  41.     printf("\t\t       学生成绩管理系统\n");
  42.     printf("\t说明:该系统可输入并存储学生姓名、学号、年龄、\n\t      语文、数学、英语、理综成绩。\n");
  43.     printf("\t      初始状态下有5组数据,在宸哥的帮助下实现了\n\t      存盘功能,特此鸣谢\n");
  44.     printf("\t          胡浩龙  版权所有   Copyright2019\n");
  45.     printf("\t请根据以下提示操作:\n");
  46.     fu:printf("\t************************************************\n");
  47.     printf("\t\t输入1,增加学生。\n");
  48.     printf("\t\t输入2,删除学生。\n");
  49.     printf("\t\t输入3,修改学生成绩。\n");
  50.     printf("\t\t输入4,查找学生。\n");
  51.     printf("\t\t输入5,列出全部学生。\n");
  52.     printf("\t\t输入6,回到主菜单。\n");
  53.     printf("\t\t输入0,退出本系统。\n");
  54.     printf("\t************************************************\n");
  55.     int a;
  56.     printf("\t\t请输入选项:");
  57.     ck:printf("\t\t");
  58.     scanf_s("%d", &a);
  59.     switch (a)
  60.     {
  61.     case 1:printf("\n\t\t本次操作要加入的学生数量为:");
  62.            int m, n;
  63.            scanf_s("%d", &n);
  64.            printf("\n\t\t加入到第几个学生后面:");
  65.            scanf_s("%d", &m);
  66.            add(stu, m, n);
  67.            break;
  68.     case 2:printf("\n\t\t请输入要删除学生的学号:");
  69.            int b;
  70.            scanf_s("%d", &b);
  71.            del(stu, b);
  72.            break;
  73.     case 3:printf("\n\t\t请输入要更改成绩的学生学号:");
  74.            int g;
  75.            scanf_s("%d", &g);
  76.            change(stu, g);
  77.            break;
  78.     case 4:find(stu);
  79.            break;
  80.     case 5:list(stu);
  81.            break;
  82.     case 6:printf("\n\t\t          欢迎回来!!\n");
  83.            goto fu;
  84.     case 0:
  85.         fopen_s(&fp, "data.bin", "wb");
  86.         fwrite(&zong, sizeof(int), 1, fp);
  87.         for (int i = 0; i < zong; i++) {
  88.             fwrite(&stu[i], sizeof(Student), 1, fp);
  89.         }
  90.         fclose(fp);
  91.         return 0;
  92.     }
  93.     printf("\n\t\t本次操作已经完成,请继续输入:\n");
  94.     goto ck;
  95. }
  96. void add(struct Student stu[], int weizhi, int nums)
  97. {  int flag=0;
  98.    if(weizhi>zong)
  99.     {
  100.     printf("\t\t输入有误!!");
  101.     flag = 1;
  102.     }
  103.    if (flag == 0)
  104.    {
  105.        for (int i = zong+nums; i >=weizhi ; i--)
  106.        {
  107.            stu[i+nums] = stu[i];
  108.        }
  109.        for (int i = weizhi; i < weizhi + nums; i++)
  110.        {
  111.            printf("\t\t请输入名字:");
  112.            scanf_s("%s", stu[i].name, 20);
  113.            int a = 1, temp;
  114.        k:printf("\t\t请输入学号:");
  115.            scanf_s("%d", &temp);
  116.            while (a)
  117.            {
  118.                for (int j = 0; j <= weizhi; j++)
  119.                {
  120.                    if (stu[j].num == temp)
  121.                    {
  122.                        printf("\t\t学号重复了!!\n");
  123.                        goto k;
  124.                    }
  125.                    else
  126.                    {
  127.                        a = 0;
  128.                    }
  129.                }
  130.                stu[i].num = temp;
  131.            }
  132.            printf("\t\t请输入学生年龄:");
  133.            scanf_s("%d", &stu[i].age);
  134.            printf("\t\t请依次输入各科成绩:");
  135.            scanf_s("%f%f%f%f", &stu[i].Chinese, &stu[i].math, &stu[i].English, &stu[i].Science);
  136.        }
  137.        zong = zong + nums;
  138.    }
  139.    else
  140.    {
  141.        printf("\n");
  142.    }
  143. }
  144. void del(struct Student stu[], int num)
  145. {
  146.     if(zong==0)
  147.     {
  148.         printf("\t\t目前系统中没有数据!\n");
  149.     }
  150.     int temp = 0;
  151.     for (int i = 0; i < zong; i++)
  152.     {
  153.         if (stu[i].num==num)
  154.         {
  155.             for (int j = i; j < zong; j++)
  156.             {
  157.                 stu[j] = stu[j + 1];
  158.             }
  159.             printf("\t\t已完成删除操作!\n");
  160.             temp = 1;
  161.             zong = zong - 1;
  162.             break;
  163.         }
  164.     }
  165.     if (temp == 0)
  166.         printf("\t\t 输入学号有误!!");
  167. }
  168. void list(struct Student stu[])
  169. {  
  170.     for (int i = 0; i < zong; i++)
  171.     {
  172.         printf("\n");
  173.         printf("\t\t姓名:%s  ", stu[i].name);
  174.         printf("学号:%d  ", stu[i].num);
  175.         printf("年龄:%d \n ",stu[i].age);
  176.         printf("  \t\t成绩为:语文%.2f分,数学%.2f分,英语%.2f分,理综%.2f分\n",stu[i].Chinese,stu[i].math,stu[i].English,stu[i].Science);
  177.     }
  178. }
  179. void find(struct Student stu[])
  180. {
  181.     int flag = 0, a;
  182.     printf("\t\t请输入学生的学号:");
  183.     scanf_s("%d", &a);
  184.         for (int i = 0; i < zong; i++)
  185.         {  
  186.             if (stu[i].num == a)
  187.             {
  188.                 printf("\n\t\t学号为%d的学生叫做%s,他的成绩如下:\n", stu[i].num, stu[i].name);
  189.                 printf("\t\t语文%.2f分,数学%.2f分,英语%.2f分,理综%.2f分\n", stu[i].Chinese, stu[i].math, stu[i].English, stu[i].Science);
  190.                 flag = 1;
  191.                 break;
  192.             }
  193.         }
  194.         if (flag==0)
  195.         {
  196.             printf("\t\t输入学号不存在!!\n");
  197.         }
  198. }
  199. void change(struct Student stu[], int p)
  200. {
  201.     int flag = 0;
  202.     for (int i = 0; i < zong; i++)
  203.     {
  204.         if (stu[i].num == p)
  205.         {
  206.             next:printf("\t\t更改语文成绩请输入1\n");
  207.             printf("\t\t更改数学成绩请输入2\n");
  208.             printf("\t\t更改英语成绩请输入3\n");
  209.             printf("\t\t更改理综成绩请输入4\n");
  210.             int d;
  211.             printf("\t\t");
  212.             scanf_s("%d", &d);
  213.             switch (d)
  214.             {
  215.             case 1: printf("\t\t当前该同学语文成绩为%.2f,请输入更改后成绩:", stu[i].Chinese);
  216.                     float u;
  217.                     scanf_s("%f", &u);
  218.                     stu[i].Chinese = u;
  219.                     printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
  220.                     flag = 1;
  221.                     int y1;
  222.                     scanf_s("\n\t\t%d", &y1);
  223.                     if (y1==1)
  224.                     {
  225.                         goto next;
  226.                     }
  227.                     else break;
  228.             case 2: printf("\t\t当前该同学数学成绩为%.2f,请输入更改后成绩:", stu[i].math);
  229.                 float s;
  230.                 scanf_s("%f", &s);
  231.                 stu[i].math = s;
  232.                 printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
  233.                 flag = 1;
  234.                 int y2;
  235.                 scanf_s("\n\t\t%d", &y2);
  236.                 if (y2 == 1)
  237.                 {
  238.                     goto next;
  239.                 }
  240.                 else break;
  241.             case 3: printf("\t\t当前该同学英语成绩为%.2f,请输入更改后成绩:", stu[i].English);
  242.                 float u1;
  243.                 scanf_s("%f", &u1);
  244.                 stu[i].English = u1;
  245.                 printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
  246.                 flag = 1;
  247.                 int y3;
  248.                 scanf_s("\n\t\t%d", &y3);
  249.                 if (y3 == 1)
  250.                 {
  251.                     goto next;
  252.                 }
  253.                 else break;
  254.             case 4: printf("\t\t当前该同学理综成绩为%.2f,请输入更改后成绩:", stu[i].Science);
  255.                 float u2;
  256.                 scanf_s("%f", &u2);
  257.                 stu[i].Science = u2;
  258.                 printf("\n\t\t更改已经完成!继续更改请输入1,退出输入0\n\t\t");
  259.                 flag = 1;
  260.                 int y4;
  261.                 scanf_s("\n\t\t%d", &y4);
  262.                 if (y4 == 1)
  263.                 {
  264.                     goto next;
  265.                 }
  266.                 else break;
  267.             }
  268.         }
  269.     }
  270.     if (flag == 0)
  271.         printf("\n\t\t输入学号有误!!");
  272. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement