鱼C论坛

 找回密码
 立即注册
查看: 1024|回复: 1

[已解决]管理系统,寻大神帮看,多谢

[复制链接]
发表于 2023-12-13 10:34:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>


  4. #define MAX_PLAYERS 100

  5. #define MAX_NAME 50
  6. #define MAX_IDENTITY 20
  7. #define MAX_RANK 15


  8. enum Option
  9. {
  10.         EXIT,
  11.         IMP,
  12.         SAVE,
  13.         DISP,
  14.         SEARCH,
  15.         ADD,
  16.         DEL,
  17.         FIX,
  18.         COUNT,
  19.         SORT
  20. };

  21. struct Info
  22. {
  23.         char id;
  24.         char name[MAX_NAME];
  25.         char identity[MAX_IDENTITY];
  26.         char rank[MAX_RANK];
  27.         float rating;
  28. };

  29. struct PlayerInfo
  30. {
  31.         struct Info data[MAX_PLAYERS];
  32.         int size;
  33. };


  34. void welcome();
  35. void InitPlayerInfo(struct PlayerInfo* ps);
  36. void AddPlayerInfo(struct PlayerInfo* ps);
  37. void DisplayPlayerInfo(struct PlayerInfo* ps);
  38. void DeletePlayerInfo(struct PlayerInfo* ps);







  39. /* run this program using the console pauser or add your own getch, system("pause") or input loop */

  40.         int main()
  41.         {
  42.                 int choice = 0;
  43.                  struct PlayerInfo player;//包含100个元素的数组和size   
  44.                 InitPlayerInfo(&player);                                                                                                                                                                 
  45.         do
  46.                 {
  47.                 welcome();
  48.                 printf("请选择(数字):");
  49.                 scanf("%d", &choice);
  50.                 switch(choice)
  51.                 {
  52.                         case IMP:
  53.                                
  54.                                 break;
  55.                         case SAVE:
  56.                        
  57.                                 break;
  58.                         case DISP:
  59.                                 DisplayPlayerInfo(&player);
  60.                                 break;
  61.                         case SEARCH:
  62.                        
  63.                                 break;
  64.                         case ADD:
  65.                                 AddPlayerInfo(&player);                               
  66.                                 break;
  67.                         case DEL:
  68.                                 DeletePlayerInfo(&player);
  69.                                 break;
  70.                         case FIX:
  71.                                
  72.                                 break;
  73.                         case COUNT:
  74.                                
  75.                                 break;
  76.                         case SORT:
  77.        
  78.                                 break;
  79.                         case EXIT:
  80.                                 printf("退出棋手信息表\n") ;
  81.                                 break;
  82.                         default:
  83.                                 printf("选择错误\n");
  84.                                 break;
  85.                  }
  86.         }
  87.         while(choice);
  88.         return 0;
  89. }




  90. void welcome()
  91. {
  92.         printf("***************欢迎使用围棋棋手管理系统*****************\n");
  93.         printf("\n");
  94.         printf("1. 从本地文件导入棋手信息\n");
  95.         printf("2. 保存棋手信息至本地文件\n");
  96.         printf("3. 显示棋手信息\n");
  97.         printf("4. 查询棋手信息\n");
  98.         printf("5. 增加棋手信息\n");
  99.         printf("6. 删除棋手信息\n");
  100.         printf("7. 修改棋手信息\n");
  101.         printf("8. 统计棋手信息\n");
  102.         printf("9. 对棋手信息进行排序\n");
  103.         printf("10. 退出系统\n");
  104.         printf("\n");
  105.         printf("***********************感谢使用*************************\n");
  106.         printf("\n");
  107.         printf("请输入对应的功能键(数字):\n");
  108. }


  109. void InitPlayerInfo(struct PlayerInfo* ps)
  110. {
  111.         memset(ps->data, 0, sizeof(ps->data));
  112.         ps->size = 0;
  113. }




  114. void DisplayPlayerInfo(struct PlayerInfo* ps)
  115. {
  116.         if(ps->size = 0)
  117.         {
  118.                 printf("信息为空\n");
  119.         }
  120.         else
  121.         {
  122.                 int i = 0;
  123.                 printf("%20s\t%20s\t%10s\t%12s\t%20s\n", "编号","姓名","身份","段位","等级分\n");
  124.                 for(i = 0; i < ps->size; i++)
  125.                 {
  126.                         printf("%20s\t%20s\t%10s\t%12s\t%20f\n",
  127.                         ps->data[i].id,
  128.                         ps->data[i].name,
  129.                         ps->data[i].identity,
  130.                         ps->data[i].rank,
  131.                         ps->data[i].rating);
  132.                 }
  133.         }
  134. }




  135. void AddPlayerInfo(struct PlayerInfo* ps)
  136. {
  137.         if(ps->size == MAX_PLAYERS)
  138.         {
  139.                 printf("信息已满,无法添加\n");
  140.                
  141.         }
  142.         else
  143.         {
  144.                 printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
  145.                 scanf("%s", ps->data[ps->size].id));
  146.                 printf("请输入棋手姓名:");
  147.                 scanf("%s", ps->data[ps->size].name);
  148.                 printf("请输入棋手身份(职业/业余):");
  149.                 scanf("%s", ps->data[ps->size].identity);
  150.                 printf("请输入棋手段位:");
  151.                 scanf("%s", ps->data[ps->size].rank);
  152.                 printf("请输入棋手等级分:");
  153.                 scanf("%20f", &(ps->data[ps->size]));               
  154.                
  155.                 ps->size++;
  156.                 printf("添加成功!");               
  157.         }
  158. }
复制代码


为什么在实现display的时候运行之后不打印我已经添加的信息呢
最佳答案
2023-12-13 10:38:28
在实现display函数中存在几个问题导致不会打印已经添加的信息。

首先,在结构体Info中,id、name、identity和rank的类型应该是字符数组(char数组)而不是单个字符。修改代码如下:
  1. struct Info
  2. {
  3.     char id[MAX_IDENTITY];
  4.     char name[MAX_NAME];
  5.     char identity[MAX_IDENTITY];
  6.     char rank[MAX_RANK];
  7.     float rating;
  8. };
复制代码

其次,在DisplayPlayerInfo函数中,判断ps->size是否为0时,应使用双等号(==)而不是赋值号(=)。修改代码如下:
  1. void DisplayPlayerInfo(struct PlayerInfo* ps)
  2. {
  3.     if(ps->size == 0)
  4.     {
  5.         printf("信息为空\n");
  6.     }
  7.     else
  8.     {
  9.         int i = 0;
  10.         printf("%20s\t%20s\t%10s\t%12s\t%20s\n", "编号","姓名","身份","段位","等级分\n");
  11.         for(i = 0; i < ps->size; i++)
  12.         {
  13.             printf("%20s\t%20s\t%10s\t%12s\t%20f\n",
  14.             ps->data[i].id,
  15.             ps->data[i].name,
  16.             ps->data[i].identity,
  17.             ps->data[i].rank,
  18.             ps->data[i].rating);
  19.         }
  20.     }
  21. }
复制代码

另外,对于输入字符串的scanf函数,需要使用%s格式,并且需要传入对应的字符数组名字,而不是整个结构体的名字。修改代码如下:
  1. printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
  2. scanf("%s", ps->data[i].id);
  3. printf("请输入棋手姓名:");
  4. scanf("%s", ps->data[i].name);
  5. printf("请输入棋手身份(职业/业余):");
  6. scanf("%s", ps->data[i].identity);
  7. printf("请输入棋手段位:");
  8. scanf("%s", ps->data[i].rank);
  9. printf("请输入棋手等级分:");
  10. scanf("%f", &(ps->data[i].rating));
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-13 10:38:28 | 显示全部楼层    本楼为最佳答案   
在实现display函数中存在几个问题导致不会打印已经添加的信息。

首先,在结构体Info中,id、name、identity和rank的类型应该是字符数组(char数组)而不是单个字符。修改代码如下:
  1. struct Info
  2. {
  3.     char id[MAX_IDENTITY];
  4.     char name[MAX_NAME];
  5.     char identity[MAX_IDENTITY];
  6.     char rank[MAX_RANK];
  7.     float rating;
  8. };
复制代码

其次,在DisplayPlayerInfo函数中,判断ps->size是否为0时,应使用双等号(==)而不是赋值号(=)。修改代码如下:
  1. void DisplayPlayerInfo(struct PlayerInfo* ps)
  2. {
  3.     if(ps->size == 0)
  4.     {
  5.         printf("信息为空\n");
  6.     }
  7.     else
  8.     {
  9.         int i = 0;
  10.         printf("%20s\t%20s\t%10s\t%12s\t%20s\n", "编号","姓名","身份","段位","等级分\n");
  11.         for(i = 0; i < ps->size; i++)
  12.         {
  13.             printf("%20s\t%20s\t%10s\t%12s\t%20f\n",
  14.             ps->data[i].id,
  15.             ps->data[i].name,
  16.             ps->data[i].identity,
  17.             ps->data[i].rank,
  18.             ps->data[i].rating);
  19.         }
  20.     }
  21. }
复制代码

另外,对于输入字符串的scanf函数,需要使用%s格式,并且需要传入对应的字符数组名字,而不是整个结构体的名字。修改代码如下:
  1. printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
  2. scanf("%s", ps->data[i].id);
  3. printf("请输入棋手姓名:");
  4. scanf("%s", ps->data[i].name);
  5. printf("请输入棋手身份(职业/业余):");
  6. scanf("%s", ps->data[i].identity);
  7. printf("请输入棋手段位:");
  8. scanf("%s", ps->data[i].rank);
  9. printf("请输入棋手等级分:");
  10. scanf("%f", &(ps->data[i].rating));
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表