搜索
查看: 245|回复: 0
打印 上一主题 下一主题

追问新生录入怎么办呢

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2020-3-24 14:30:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>

  4. FILE *fp;  //定义文件
  5. char a;    //返回选择变量
  6. float kq = 10000;    //应到打卡次数

  7. struct  student
  8. {
  9.   char name[20];      //姓名
  10.   char number[11];    //学号
  11.   char sex;           //性别
  12.   int year;           //出生日期--年
  13.   int month;          //出生日期--月
  14.   int day;            //出生日期--日
  15.   int k;              //打卡次数
  16. }stu[100];

  17. void input();
  18. void change();
  19. void search();
  20. void times();
  21. void evaluate();
  22. int main();

  23. int main()
  24. {
  25.   int it = 0;
  26.   printf("                ★★★★★★★★★★★★★★★★★★★★★★★★");
  27.   printf("                ★         ※欢迎进入学生考勤系统             ★");
  28.   printf("                ★                                            ★");
  29.   printf("                ★         1.学生信息及打卡情况录入           ★");
  30.   printf("                ★                                            ★");
  31.   printf("                ★         2.修改某个学生的打卡情况           ★");
  32.   printf("                ★                                            ★");
  33.   printf("                ★         3.查询某个学生的打卡记录           ★");
  34.   printf("                ★                                            ★");
  35.   printf("                ★         4.旷课学生的姓名及次数             ★");
  36.   printf("                ★                                            ★");
  37.   printf("                ★         5.学生打卡的总评分数计算           ★");
  38.   printf("                ★                                            ★");
  39.   printf("                ★         6.退出系统                         ★");
  40.   printf("                ★                                            ★");
  41.   printf("                ★★★★★★★★★★★★★★★★★★★★★★★★");
  42.   printf("         *******请选择您需要的操作*******  ");
  43.   scanf("%d", &it);
  44.   switch (it)
  45.   {
  46.   case 1: input(); break;
  47.   case 2:change(); break;
  48.   case 3:search(); break;
  49.   case 4:times(); break;
  50.   case 5:evaluate(); break;
  51.   case 6:           break;
  52.   default: printf("请重新输入!");
  53.   }
  54.   if (it == 6)
  55.     printf("                        退出考勤系统,欢迎下次使用!");
  56.   system("pause");
  57.   return 0;
  58. }

  59. void input()
  60. {
  61.   int i = 0;
  62.   int j = 0;
  63.   int x = 1;
  64.   printf("************1.学生信息及打卡情况录入************");
  65.   if ((fp = fopen("data.txt", "w")) == NULL)
  66.   {
  67.     printf("文件打开失败! ");
  68.     main();
  69.   }
  70.   for (i = 0; x == 1; i++)
  71.   {
  72.     for (; j == 0;)
  73.     {
  74.       getchar();
  75.       printf("请输入第%d个学生的姓名:", i + 1);
  76.       gets(stu[i].name);
  77.       printf("请输入第%d个学生的学号:", i + 1);
  78.       gets(stu[i].number);
  79.       printf("请输入第%d个学生的性别(男-m 女-f):", i + 1);
  80.       stu[i].sex = getchar();
  81.       printf("请输入第%d个学生的出生日期(格式:年-月-日):", i + 1);
  82.       scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);
  83.       printf("请输入第%d个学生当前的打卡次数:", i + 1);
  84.       scanf("%d", &stu[i].k);
  85.       printf("您输入的信息为: 姓名%s  学号%s   性别%c   出生日期 %d年%d月%d日   打卡次数%d   ",
  86.         stu[i].name, stu[i].number, stu[i].sex,stu[i].year, stu[i].month, stu[i].day, stu[i].k);
  87.       printf("请确定信息 (重输-0 确定-1): ");
  88.       scanf("%d", &j); //输入确认
  89.     }   
  90.     j = 0;
  91.     if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
  92.       printf("文件写入错误! ");  // 写入文件
  93.     printf("是否继续输入下一个学生的信息  终止-0 继续-1: ");
  94.     scanf("%d", &x);   //继续输入的选择
  95.   }
  96.   fclose(fp);
  97.   printf("返回主菜单-0 :");
  98.   getchar();
  99.   a = getchar();
  100.   getchar();
  101.   if (a == '0')
  102.     main();      //返回主菜单
  103. }      //录入数据函数结束

  104. void change()
  105. {
  106.   printf("************2.修改某个学生的打卡情况************");
  107.   int i = 0;
  108.   int j = 0;
  109.   int t = 10;
  110.   int it = 10;
  111.   int x = 10;;
  112.   char name[10] = { 0 };
  113.   char number[10] = { 0 };
  114.   if ((fp = fopen("data.txt", "r")) == NULL)   //将文件内容读入内存
  115.   {
  116.     printf("文件打开失败! ");
  117.     main();
  118.   }
  119.   for (i = 0; feof(fp) == 0; ++i)
  120.   {
  121.     fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
  122.   }
  123.   printf("选择修改对象:按姓名查找-1 按学号查找-2: ");
  124.    scanf("%d", &it);
  125.   if (it == 1)     //按姓名查找开始
  126.   {
  127.     printf("请输入需要修改学生的姓名: ");
  128.     scanf("%s", &name);
  129.     for (j = 0; t != 0; j++)
  130.       t = strcmp(stu[j].name, name);
  131.     if (j == i)
  132.     {
  133.       t = 0;
  134.       printf("未找到该学生信息,请重新输入! ");
  135.       fclose(fp);
  136.     }
  137.     if (j < i)   //查询成功
  138.     {
  139.       printf("您查询的信息为: 姓名%s  学号%s   性别%c   打卡次数%d   ",
  140.         stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].k);
  141.     }
  142.     printf("是否确认修改该生打卡信息 否-0  是-1: ");
  143.     scanf("%d", &x);
  144.     if (x == 1)
  145.     {
  146.       printf("请输入新的打卡次数: ");
  147.       scanf("%d", &stu[j-1].k);    //输入新的打卡次数
  148.       if ((fp = fopen("data.txt", "w")) == NULL) //以只写方式打开
  149.       {
  150.         printf("文件打开失败! ");
  151.         main();
  152.       }
  153.       if (fwrite(&stu[j], sizeof(struct student), 1, fp) != 1)
  154.         printf("文件写入错误! ");    //写入文件
  155.     }
  156.     fclose(fp);
  157.   }//按姓名查找结束
  158.   if (it == 2)    //按学号查找开始
  159.   {
  160.     printf("请输入需要修改学生的学号:");
  161.     scanf("%s", &number);
  162.     for (j = 0; t != 0; j++)
  163.       t = strcmp(stu[j].number, number);
  164.     if (j == i)
  165.     {
  166.       t = 0;
  167.       printf("未找到该学生信息,请重新输入! ");
  168.     }
  169.     if (j < i)   //查询成功
  170.     {
  171.       printf("您查询的信息为: 姓名%s  学号%s   性别%c  打卡次数%d   ",
  172.         stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex,  stu[j - 1].k);
  173.     }
  174.     printf("是否确认修改该生打卡信息 否-0 是-1:");
  175.     scanf("%d", &x);
  176.     if (x == 1)
  177.     {
  178.       printf("请输入新的打卡次数: ");
  179.       scanf("%d", &stu[j-1].k);    //输入新的打卡次数
  180.       if ((fp = fopen("data.txt", "w")) == NULL) //以只写方式打开
  181.       {
  182.         printf("文件打开失败! ");
  183.         main();
  184.       }
  185.       if (fwrite(&stu[j], sizeof(struct student), 1, fp) != 1)
  186.         printf("文件写入错误! ");    //写入文件
  187.     }
  188.     fclose(fp);
  189.   }//按学号查询结束
  190.   printf("是否继续修改其他学生打卡信息 返回主菜单-0 继续-1: ");
  191.   scanf("%d", &x);
  192.   if (x == 1)    change();
  193.   else         main();  //返回主菜单     
  194. }    //修改数据函数内容结束


  195. void search()
  196. {
  197.   printf("************3.查询某个学生的打卡记录************");
  198.   int i = 0;
  199.   int j = 0;
  200.   int it = 10;
  201.   int t = 10;
  202.   int x = 10;
  203.   char name[10] = { 0 };
  204.   char number[10] = { 0 };
  205.   if ((fp = fopen("data.txt", "r")) == NULL)   //将文件内容读入内存
  206.   {
  207.     printf("文件打开失败! ");
  208.     main();
  209.   }
  210.   for (i = 0; feof(fp) == 0; ++i)
  211.   {
  212.     fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
  213.   }
  214.   printf("选择查找方式:按姓名查找-1 按学号查找-2: ");
  215.   scanf("%d", &it);
  216.   if (it == 1)     //按姓名查找开始
  217.   {
  218.     printf("请输入需要查询学生的姓名: ");
  219.     scanf("%s", &name);
  220.     for (j = 0; t != 0; j++)
  221.       t = strcmp(stu[j].name, name);
  222.     if (j == i)
  223.     {
  224.       t = 0;
  225.       printf("未找到该学生信息,请重新输入! ");
  226.     }
  227.     if (j < i)   //查询成功
  228.     {
  229.       printf("您查询的信息为: 姓名%s  学号%s   性别%c   出生日期 %d年%d月%d日   打卡次数%d   ",
  230.         stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].year, stu[j - 1].month, stu[j - 1].day, stu[j - 1].k);
  231.     }
  232.     fclose(fp);
  233.   }//按姓名查询结束
  234.   if (it == 2)    //按学号查找开始
  235.   {
  236.     printf("请输入需要查询学生的学号:");
  237.     scanf("%s", &number);
  238.     for (j = 0; t != 0; j++)
  239.       t = strcmp(stu[j].number, number);
  240.     if (j == i)
  241.     {
  242.       t = 0;
  243.       printf("未找到该学生信息,请重新输入! ");
  244.     }
  245.     if (j < i)   //查询成功
  246.     {
  247.       printf("您查询的信息为: 姓名%s  学号%s   性别%c   出生日期 %d年%d月%d日   打卡次数%d   ",
  248.         stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].year, stu[j - 1].month, stu[j - 1].day, stu[j - 1].k);
  249.     }
  250.     fclose(fp);
  251.   }
  252.   printf("是否继续查询其他学生打卡信息 返回主菜单-0 继续-1: ");
  253.   scanf("%d", &x);
  254.   if (x == 1)    search();
  255.   else         main();  //返回主菜单   
  256. }

  257. void times()
  258. {
  259.   printf("************4.旷课学生的姓名及次数  ************");
  260.   int i = 0;
  261.   int j = 0;
  262.   int it = 0;
  263.   if ((fp = fopen("data.txt", "r")) == NULL)   //将文件内容读入内存
  264.   {
  265.     printf("文件打开失败! ");
  266.     main();
  267.   }
  268.   for (i = 0; feof(fp) == 0; i++)
  269.   {
  270.     fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
  271.   }
  272.   printf("旷课学生的姓名及次数如下: ");
  273.   for (j = 0; j < i-1;j++ )
  274.   {
  275.     if (stu[j].k < kq)
  276.     printf("姓名%s  学号%s   缺课次数%f   ",stu[j].name, stu[j].number, (kq - stu[j].k));
  277.   }
  278.   printf("是否返回主菜单 0否 1是: ");
  279.   scanf("%d", &it);
  280.   if (it == 0)  return;
  281.   else main();
  282. }

  283. void evaluate()
  284. {
  285.   printf("************5.学生打卡的总评分数计算************");
  286.   int i = 0;
  287.   int j = 0;
  288.   int t = 10;
  289.   int it = 10;
  290.   int x = 10;
  291.   float score=0;
  292.   char name[10] = { 0 };
  293.   char number[10] = { 0 };
  294.   if ((fp = fopen("data.txt", "r")) == NULL)  //将文件读入内存
  295.   {
  296.     printf("文件打开失败! ");
  297.     main();
  298.   }
  299.   for (i = 0; feof(fp) == 0; ++i)
  300.     fread(&stu[i], sizeof(struct student), 1, fp);   //读取文件内容
  301.   printf("选择计算对象:1 按姓名查找 2 按学号查找: ");
  302.   scanf("%d", &it);
  303.   if (it == 1)     //按姓名查找开始
  304.   {
  305.     printf("请输入需要计算分数的学生姓名: ");
  306.     scanf("%s", &name);
  307.     for (j = 0; t != 0; ++j)
  308.       t = strcmp(stu[j].name, name);
  309.     if (j == i)
  310.     {
  311.       t = 0;
  312.       printf("未找到该学生信息,请重新输入! ");
  313.       fclose(fp);
  314.     }
  315.     if (j < i)   //查询成功
  316.     {
  317.       printf("您查询的信息为: 姓名%s  学号%s   打卡次数%d   ",
  318.         stu[j - 1].name, stu[j - 1].number, stu[j - 1].k);
  319.       score = stu[j-1].k / kq * 100;
  320.       printf("该生当前打卡总评分为 %5.2f ", score);
  321.     }
  322.     fclose(fp);
  323.     printf("是否继续计算其他学生打卡分数 0否 1是");
  324.     scanf("%d", &x);
  325.     if (x == 1)   evaluate();
  326.     else         main();
  327.   }      //按姓名查找结束
  328.   if (it == 2)    //按学号查找开始
  329.   {
  330.     printf("请输入需要计算分数的学生学号:");
  331.     scanf("%s", &number);
  332.     for (j = 0; t != 0; j++)
  333.       t = strcmp(stu[j].number, number);
  334.     if (j == i)
  335.     {
  336.       t = 0;
  337.       printf("未找到该学生信息,请重新输入! ");
  338.     }
  339.     if (j < i)   //查询成功
  340.     {
  341.       printf("您查询的信息为: 姓名%s  学号%s   性别%c   打卡日期 %d年%d月%d日   打卡次数%d   ",
  342.         stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].year, stu[j - 1].month, stu[j - 1].day, stu[j - 1].k);
  343.       score = (float)(stu[j-1].k) / kq * 100;
  344.       printf("该生当前打卡总评分为 %5.2f ", score);
  345.     }
  346.     fclose(fp);
  347.     printf("是否继续计算其他学生打卡分数 0否 1是");
  348.     scanf("%d", &x);
  349.     if (x == 1)   evaluate();
  350.     else         main();
  351.   }    //按学号查找结束
  352.   printf("0 返回主菜单");
  353.   getchar();
  354.   a = getchar();
  355.   getchar();
  356.   if (a == '0')
  357.     main();  //返回主菜单         
  358. }
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表