鱼C论坛

 找回密码
 立即注册
查看: 2542|回复: 3

c语言制作的药品管理系统,出现了问题,请大神帮助

[复制链接]
发表于 2015-7-2 23:27:30 | 显示全部楼层 |阅读模式

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

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

x
[qq]2211020259[/qq]药品管理系统,在输入药品各项之后查找只能查找到第一个,第二三个没办法找到,同时删除的时候第二三个也没有办法删除,显示信息不存在。但是查询全部信息的时候可以查询的到。代码如下,同时运行的图片也在下面。
  1. #include<stdio.h>
  2. #include<string.h>  
  3. #include<stdlib.h>
  4. #include<math.h>
  5. typedef struct  
  6. { char     name[10];  //药名
  7.   char     ID[20];//编号
  8.   char     number[60];//库存数量
  9.   char     price[80];//价格
  10. }datatype;
  11. typedef struct node  
  12. {
  13.         datatype data;     
  14.         struct node * next;  
  15. }listnode;  
  16. typedef listnode * linklist;  
  17. linklist head;  
  18. listnode * p;
  19. //1药品信息的建立  //
  20. linklist Create(int a )  
  21. {
  22.   linklist head=(listnode *)malloc(sizeof(listnode));  
  23.   listnode *p,*q;
  24.   q=head;
  25.   while(a--)
  26.      {
  27.           p=(listnode *)malloc(sizeof(listnode));
  28.           printf("药名 编号  数量 价格\n");
  29.           scanf("%s %s %s %s",p->data.name,p->data.ID,
  30.                   p->data.number,p->data.price);
  31.           q->next=p;
  32.           q=p;
  33.   }
  34.   q->next=NULL;
  35.   return head;
  36.    
  37. }
  38. //2药品信息的添加  
  39. void Add(linklist head,int b)  
  40. {
  41.         listnode * m,* n,* p;  
  42.         m=head;  
  43.         n=m->next;  
  44.         while(n->next!=NULL)  
  45.         {
  46.                 m=n;  
  47.                 n=n->next;  
  48.         }
  49.         while(b--)
  50.         {
  51.       p=(listnode *)malloc(sizeof(listnode));  
  52.       printf("药名 编号 数量 价格  \n");
  53.           scanf("%s %s %s %s",p->data.name,p->data.ID,
  54.                   p->data.number,p->data.price);
  55.       n->next=p;  
  56.       n=p;  
  57.         }
  58.         n->next=NULL;
  59.   
  60. }
  61. //3按药名查找药品信息  
  62. listnode *Find(linklist head)  
  63. {
  64.          listnode *p;
  65.          char name[10];

  66.           p=head->next;  

  67.                  printf("请输入要查询的药名:");
  68.                          scanf("%s",&name);
  69.                          while(p&&strcmp(p->data.name,name/*比较两个条件不相等输出1*/)>0)
  70.                                  p=p->next;  
  71.                          if(p==NULL||strcmp(p->data.name,name)<0)  
  72.                                  p=NULL;
  73. //                 }
  74.          return p;
  75.           
  76. }



  77.   
  78. //4药名信息的删除  
  79. void Delete(linklist head)
  80. {
  81.         int i;
  82.         listnode *p,*q;
  83.         p=Find(head);
  84.         if(p==NULL)
  85.         {
  86.                 printf("信息不存在!\n");
  87.                 return;
  88.         }
  89.         else
  90.         {
  91.                 printf("要删除的话就按1:");  
  92.                 scanf("%d",&i);  
  93.                 if(i==1)  
  94.                 {  
  95.                         q=head;  
  96.                         while(q!=NULL&&q->next!=p)  
  97.                                 q=q->next;  
  98.                         q->next=p->next;
  99.                         free(p);
  100.                         printf("已删除信息!\n");
  101.                 }
  102.         }

  103. }
  104. //5药名信息的输出  
  105. void List(linklist head)  
  106. {  
  107.          listnode *p;
  108.          p=head;
  109.          printf("药名 编号 数量  价格  \n");
  110.          while(p->next!=NULL)
  111.          {
  112.                  printf("%s %s %s %s\n",p->next->data.name,p->next->data.ID,
  113.                   p->next->data.number,p->next->data.price);
  114.                  p=p->next;
  115.          }
  116. }
  117.   int Menu()
  118. {
  119.   int i;
  120.   system("pause");
  121. system ("cls");//清屏数据
  122.   printf("—————————————欢迎使用药品信息管理系统————————————\n");  
  123.   printf("|                                                                         |\n");
  124.   printf("|                                                                         |\n");
  125.   printf("|                           1.建立信息表                                  |\n");  
  126.   printf("|                           2.插入新信息                                  |\n");  
  127.   printf("|                           3.查询信息记录                                |\n");   
  128.   printf("|                           4.删除信息记录                                |\n");
  129.   printf("|                           5.显示信息                                    |\n");
  130.   printf("|                           0.退出管理系统                                |\n");
  131.   printf("|                                                                         |\n");
  132.   printf("|———————————————————————————————————— |\n");
  133.   printf("请选择 0-5:");  
  134.   for(;;)  
  135.    {  
  136.           scanf("%d",&i);
  137.       printf("\n");
  138.       if(i<0||i>5)  
  139.                   printf("输出错误,重选0-5:");  
  140.           else  
  141.                   break ;
  142.   }
  143.   return i;
  144. }
  145.    //药品信息系统主函数部分
  146. void  main()  

  147. {
  148.         system ("color 4f");
  149.         for(;;)  
  150. {
  151.                 switch(Menu())  
  152. {
  153.                 case 1:  
  154.                         printf("————————————————药品信息的建立————————————————\n");
  155.                         int i;
  156.                         printf("输入你想输入的数目:");
  157.                         scanf("%d",&i);
  158.                         head=Create(i);
  159.                         List(head);
  160.                         break;  
  161.                 case 2:  
  162.                         printf("————————————————药品信息的添加————————————————\n");
  163.                         int a;
  164.                         printf("输入你想添加的数目:");
  165.                         scanf("%d",&a);
  166.                         Add(head,a);
  167.                         break;  
  168.                 case 3:  
  169.                         printf("————————————————药品名的查询————————————————\n");  
  170.                         p=Find(head);  
  171.                         if(p!=NULL)  
  172.                         {
  173.                                 printf("药名 数量  类型  价格  \n");
  174.                                 printf("—————————————————————————————\n");  
  175.                             printf("%s %s %s %s\n",p->data.name,p->data.ID,
  176.                              p->data.number,p->data.price);
  177.                                 printf("\n");
  178.                                  
  179.                         }  
  180.                         else {
  181.                                 printf("该客户信息不存在!");
  182.                         }
  183.                
  184.                         List(head);  
  185.                         break;
  186.                 case 4:  
  187.                         printf("————————————————药品信息的删除————————————————\n");  
  188.                         Delete(head);  
  189.                         break;
  190.                 case 5:  
  191.                         printf("————————————————药品信息的输出————————————————\n");  
  192.                         List(head);
  193.                         break;
  194.                 case 0:  
  195.                         printf("————————————————退出本系统————————————————\n");
  196.                         exit(0);
  197.                         }
  198.                 }
  199.         }
复制代码

查询第一个可以查到

查询第一个可以查到

查询其他的无法查到

查询其他的无法查到

删除其他的也无法删除

删除其他的也无法删除
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-3 14:47:53 | 显示全部楼层
你是用链表存储的,查找和删除不到第二个之后的。说明你的链表有问题或者链表的索引有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-3 23:16:20 | 显示全部楼层
不如用STL里的vector,比链表简单
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-8 17:34:14 | 显示全部楼层
你这链表,是不能自由索引的,要用遍历的方法索引才行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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