找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2049|回复: 0
打印 上一主题 下一主题
收起左侧

C语言元器件信息管理系统源程序设计

[复制链接]
跳转到指定楼层
楼主
ID:606867 发表于 2019-9-3 14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
元器件信息管理系统



单片机源程序如下:
  1. #include<stdio.h>
  2. #include<stdlib.h>  
  3. #include<string.h>
  4. struct component
  5. {
  6.     char identifier[15];       // 1、编号
  7.     char type[15];             // 2、类型
  8.     char model[15];            // 3、型号
  9.     char number[15];           // 4、数目
  10.     char enclosure[15];        // 5、封装
  11.     char factory[15];          // 6、厂家
  12.     char money[15];            // 7、价格
  13.     char date[15];             // 8、生产日期
  14. };
  15. //类型定义语句  
  16. typedef struct node
  17. {
  18.     struct component data;
  19.     struct node *next;
  20. }Node;
  21. //添加信息函数
  22. void Add(Node *worker)
  23. {
  24.     Node *p, *q;
  25.     char n[10];
  26.     q = worker;
  27.     while (q->next != NULL)
  28.     {
  29.         q = q->next;     
  30.     }
  31.     while (1)
  32.     {
  33.         printf("提示:输入0返回主菜单!\n");
  34.         printf("请输入编号:");
  35.         scanf("%s", n);
  36.         if (strcmp(n, "0") == 0)
  37.         {
  38.             break;
  39.         }
  40.         p = (Node *)malloc(sizeof(Node));
  41.         strcpy(p->data.identifier, n);
  42.         
  43.         printf("请输入类型:");
  44.         scanf("%s", p->data.type);
  45.         printf("请输入型号:");
  46.         scanf("%s", p->data.model);
  47.         printf("请输入数目:");
  48.         scanf("%s", p->data.number);
  49.         printf("请输入封装:");
  50.         scanf("%s", p->data.enclosure);
  51.         printf("请输入厂家:");
  52.         scanf("%s", p->data.factory);
  53.         printf("请输入价格:");
  54.         scanf("%s", p->data.money);
  55.         printf("请输入生产日期:");
  56.         scanf("%s", p->data.date);
  57.         printf("提示:已经完成一条记录的添加!");
  58.         p->next = NULL;
  59.         q->next = p;      
  60.         q = p;        
  61.     }
  62. }
  63. //修改元件信息函数
  64. int  change(Node *worker)
  65. {
  66.     Node *p;
  67.     char find[20];   
  68.     p = worker->next;   
  69.     if (p == NULL)
  70.     {
  71.         printf("\n提示:没有元件可以修改!\n");
  72.         return 0;
  73.     }   
  74.     printf("请输入要修改的编号");
  75.     scanf("%s", find);
  76.     while (p != NULL)
  77.     {
  78.         if (strcmp(p->data.identifier, find) == 0)
  79.         {
  80.             break;
  81.         }
  82.         p = p->next;
  83.     }
  84.     if(p!=NULL)
  85.     {
  86.         int x;
  87.         while (1)
  88.         {
  89.             printf("完成修改请输入0,否则输入非0数字进行修改!");
  90.             scanf("%d", &x);
  91.             if (x == 0)
  92.             {
  93.                 break;
  94.             }
  95.             printf(" 请输入新的编号: ");
  96.             scanf("%s", p->data.identifier);
  97.             printf(" 请输入新的元件类型: ");
  98.             scanf("%s", p->data.type);
  99.             printf(" 请输入新的元件型号: ");
  100.             scanf("%s", p->data.model);
  101.             printf(" 请输入新的元件数目: ");
  102.             scanf("%s", p->data.number);
  103.             printf(" 请输入新的元件封装: ");
  104.             scanf("%s", p->data.enclosure);
  105.             printf(" 请输入新的元件厂家: ");
  106.             scanf("%s", p->data.factory);
  107.             printf(" 请输入新的元件价格: ");
  108.             scanf("%s", p->data.money);
  109.             printf(" 请输入新的元件生产日期: ");
  110.             scanf("%s", p->data.date);
  111.             printf(" \n提示:该元器件资料已经修改!\n ");
  112.         }
  113.     }
  114.     else
  115.         printf("\n提示:没有你要修改的资料!\n ");
  116. }
  117. //显示元件信息函数
  118. int  Disp(Node *worker)
  119. {
  120.     Node *p;
  121.     p = worker->next;
  122.     if (p == NULL)
  123.     {
  124.         printf(" \n提示:没有信息可以显示!\n ");
  125.         return 0;
  126.     }
  127.     printf("\t\t\t\t显示结果\n");
  128.     printf(" \n编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  129.     while (p!=NULL)  
  130.     {
  131.         printf("\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.identifier, p->data.type,
  132.             p->data.model, p->data.number, p->data.enclosure, p->data.factory,
  133.             p->data.money, p->data.date);
  134.         p = p->next;
  135.     }
  136. }
  137. //查询元件信息函数: 按职元件编号查询或按元件类型查询
  138. int  Cha_xun(Node *worker)
  139. {
  140.     Node *p;
  141.     int sel,i=0;
  142.     char find[20];   
  143.     p = worker->next;   
  144.     if (p==NULL)
  145.     {
  146.         printf(" \n提示:没有资料可以查询!\n ");
  147.         return 0;
  148.     }
  149.     printf("\n提示:\n  0 退出\n1 按编号查询\n2 按元件类型 \n3 元件型号\n4 元件数目\n5 元件封装\n6 元件厂家\n7 元件价格\n8 元件生厂日期\n  ");
  150.     printf("请选择:");
  151.     scanf("%d", &sel);
  152.     if (sel == 1)
  153.     {
  154.         printf("\n请输入你要查询分类的编号:");
  155.         scanf("%s", find);
  156.         while (p!=NULL)  
  157.         {
  158.             if (strcmp(p->data.identifier, find) == 0)
  159.             {
  160.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  161.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,
  162.                     p->data.model, p->data.number, p->data.enclosure, p->data.factory,
  163.                     p->data.money, p->data.date);
  164.                 i++;
  165.             }
  166.             p = p->next;   
  167.             
  168.         }
  169.         if(i==0)
  170.             printf("查找的信息有误\n");
  171.     }
  172.     else if (sel == 2)
  173.     {
  174.         printf(" \n输入你要查询分类的元件编号:");
  175.         scanf("%s", find);
  176.         while (p!=NULL)
  177.         {
  178.             if (strcmp(p->data.type, find) == 0)
  179.             {
  180.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  181.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  182.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  183.             i++;
  184.             }
  185.             p = p->next;
  186.             
  187.         }
  188.             if(i==0)
  189.             printf("查找的信息有误\n");
  190.     }
  191.     else if (sel == 3)
  192.     {
  193.         printf(" \n输入你要查询型号编号:");
  194.         scanf("%s", find);
  195.         while (p!=NULL)
  196.         {
  197.             if (strcmp(p->data.model, find) == 0)
  198.             {
  199.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  200.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  201.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  202.             i++;
  203.             }
  204.             p = p->next;
  205.             
  206.         }
  207.         if(i==0)
  208.             printf("查找的信息有误\n");
  209.     }
  210.     else if (sel == 4)
  211.     {
  212.         printf(" \n输入你要查询的数目:");
  213.         scanf("%s", find);
  214.         while (p!=NULL)
  215.         {
  216.             if (strcmp(p->data. number, find) == 0)
  217.             {
  218.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  219.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  220.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  221.             i++;
  222.             }
  223.             p = p->next;
  224.             
  225.         }
  226.             if(i==0)
  227.             printf("查找的信息有误\n");
  228.     }
  229.     else if (sel == 5)
  230.     {
  231.         printf(" \n输入你要查询的封装:");
  232.         scanf("%s", find);
  233.         while (p!=NULL)
  234.         {
  235.             if (strcmp(p->data. enclosure, find) == 0)
  236.             {
  237.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  238.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  239.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  240.             i++;
  241.             }
  242.             p = p->next;
  243.             
  244.         }
  245.             if(i==0)
  246.             printf("查找的信息有误\n");
  247.     }
  248.     else if (sel == 6)
  249.     {
  250.         printf(" \n输入你要查询的厂家:");
  251.         scanf("%s", find);
  252.         while (p!=NULL)
  253.         {
  254.             if (strcmp(p->data. factory, find) == 0)
  255.             {
  256.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  257.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  258.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  259.         i++;   
  260.             }
  261.             p = p->next;
  262.             
  263.         }
  264.             if(i==0)
  265.             printf("查找的信息有误\n");
  266.     }
  267.     else if (sel == 7)
  268.     {
  269.         printf(" \n输入你要查询的价格:");
  270.         scanf("%s", find);
  271.         while (p!=NULL)
  272.         {
  273.             if (strcmp(p->data. money, find) == 0)
  274.             {
  275.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  276.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  277.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  278.             i++;
  279.             }
  280.             p = p->next;
  281.         
  282.         }
  283.             if(i==0)
  284.             printf("查找的信息有误\n");
  285.     }
  286.     else if (sel == 8)
  287.     {
  288.         printf(" \n输入你要查询的生产日期:");
  289.         scanf("%s", find);
  290.         while (p!=NULL)
  291.         {
  292.             if (strcmp(p->data.date , find) == 0)
  293.             {
  294.                 printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
  295.                 printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.identifier, p->data.type,p->data.model,
  296.                     p->data.number, p->data.enclosure, p->data.factory,    p->data.money, p->data.date);
  297.                 i++;
  298.             }
  299.             p = p->next;
  300.         
  301.         }
  302.             if(i==0)
  303.             printf("查找的信息有误\n");
  304.     }
  305.    
  306.     else if (sel == 0)
  307.         return 0;   
  308. }
  309. int Tong_ji(Node *worker)//统计元件信息
  310. {
  311.     Node *p;
  312.     int sel;
  313.     char find[20];   
  314.     p = worker->next;   
  315.     if (p==NULL)
  316.     {
  317.         printf(" \n提示:没有资料可以查询!\n ");
  318.         return 0;
  319.     }
  320.     printf("\n提示:\n输入 0---- 退出\n输入 1----按型号查询\n输入 2-----按元件类型 \n3 元件型号\n4 元件数目\n5 元件封装\n6 元件厂家\n7 元件价格\n8 元件生厂日期");
  321.     printf("\n请选择:");
  322.     scanf("%d", &sel);
  323.     if (sel == 1)
  324.     {
  325.         int i=1;
  326.         while (p->next!=NULL)  
  327.         {   
  328.             i++;
  329.             if(strcmp(p->data.identifier,p->next->data.identifier )==0)
  330.                 i--;
  331.             p = p->next;   
  332.         }
  333.         printf("共有%d种编号的元件\n",i);
  334.     }
  335.     else if (sel == 2)
  336.     {
  337.         int i=1;
  338.         while (p->next!=NULL)  
  339.         {   
  340.             i++;
  341.             if(strcmp(p->data.type,p->next->data.type )==0)
  342.                 i--;
  343.             p = p->next;   
  344.         }
  345.         printf("共有%d种类型的元件\n",i);
  346.     }
  347.     else if (sel == 3)
  348.     {
  349.         int i=1;
  350.         while (p->next!=NULL)  
  351.         {   
  352.             i++;
  353.             if(strcmp(p->data.model,p->next->data.model )==0)
  354.                 i--;
  355.             p = p->next;   
  356.         }
  357.         printf("共有%d种型号的元件\n",i);
  358.     }
  359.     else if (sel == 4)
  360.     {
  361.         int i=1;
  362.         while (p->next!=NULL)  
  363.         {   
  364.             i++;
  365.             if(strcmp(p->data.number,p->next->data.number )==0)
  366.                 i--;
  367.             p = p->next;   
  368.         }
  369.         printf("共有%d种数目的元件\n",i);
  370.     }
  371.     else if (sel == 5)
  372.     {
  373.         int i=1;
  374.         while (p->next!=NULL)  
  375.         {   
  376.             i++;
  377.             if(strcmp(p->data.enclosure,p->next->data.enclosure )==0)
  378.                 i--;
  379.             p = p->next;   
  380.         }
  381.         printf("共有%d种封装的元件\n",i);
  382.     }
  383.     else if (sel == 6)
  384.     {
  385.         int i=1;
  386.         while (p->next!=NULL)  
  387.         {   
  388.             i++;
  389.             if(strcmp(p->data.factory,p->next->data.factory )==0)
  390.                 i--;
  391.             p = p->next;   
  392.         }
  393.         printf("共有%d种厂家的元件\n",i);
  394.     }
  395.     else if (sel == 7)
  396.     {
  397.         int i=1;
  398.         while (p->next!=NULL)  
  399.         {   
  400.             i++;
  401.             if(strcmp(p->data.money,p->next->data.money )==0)
  402.                 i--;
  403.             p = p->next;   
  404.         }
  405.         printf("共有%d种价格的元件\n",i);
  406.     }
  407.     else if (sel == 8)
  408.     {
  409.         int i=1;
  410.         while (p->next!=NULL)  
  411.         {   
  412.             i++;
  413.             if(strcmp(p->data.date,p->next->data.date)==0)
  414.                 i--;
  415.             p = p->next;   
  416.         }
  417.         printf("共有%d种生产日期的元件\n",i);
  418.     }
  419.     else if (sel == 0)
  420.         return 0;   
  421.    
  422. }

  423. //删除元件信息函数
  424. int  Delete(Node *worker)
  425. {
  426.     Node *p, *r;
  427.     char find[10];
  428.     p = worker->next;
  429.     if (p == NULL)
  430.     {
  431.         printf("提示:没有元件信息可以删除!\n ");
  432.         return 0;
  433.     }
  434.     printf(" \n提示:请输入你要删除的元件编号!\n ");
  435.     scanf("%s", find);
  436.     while (p != NULL)
  437.     {
  438.         if (strcmp(p->data.identifier, find) == 0)
  439.         {
  440.             break;
  441.         }
  442.         p = p->next;
  443.     }
  444.     if (p!=NULL)
  445.     {
  446.         r = worker;
  447.         while (r->next != p)
  448.         {
  449.             r = r->next;
  450.         }
  451.         r->next = r->next->next;   
  452.         printf("已成功删除\n");
  453.     } else
  454.         printf("系统中没有该信息\n");

  455. }

  456. //将职工信息保存到文件中
  457. void save(Node *worker)
  458. {
  459.     int n;
  460.     Node *p = NULL;   
  461.     char filename[16];
  462.     FILE *fp;   
  463.     printf("是否保存到文件?( 1-----保存!,0-----不保存! )");
  464.     scanf("%d", &n);
  465.     if (n == 1)
  466.     {
  467.         if (worker->next == NULL)
  468.         {
  469.             printf(" 没有记录!");
  470.         }
  471.         else
  472.         {
  473.             p = worker->next;
  474.         }
  475.         
  476.         printf("请输入要保存该信息的文件名:\n");      /*输入要保存的文件的名字*/
  477.         scanf("%s",filename);
  478.         fp=fopen(filename,"w");
  479.         while (p != NULL)   
  480.         {
  481.             fprintf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t  ", p->data.identifier, p->data.type, p->data.model,
  482.                 p->data.number, p->data.enclosure, p->data.factory, p->data.money,p->data.date);        
  483.             p = p->next;
  484.         }
  485.         fclose(fp);  
  486.     }
  487. }

  488. //读取元件信息
  489. void Du_qu(Node *worker)
  490. {
  491.     int a;
  492.     char filename[16];
  493.     Node *p;
  494.     FILE *fp;
  495.     char str[1000]={0};
  496.     printf("请输入存有元件信息的文件名:\n");   
  497.     scanf("%s",filename);
  498.     if((fp=fopen(filename,"r"))==NULL)   
  499.     {
  500.         printf("文件名错误!\n ");
  501.     }
  502.     fgets(str,1000,fp);
  503.     printf("编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n");
  504.     for(a=1;a<(strlen(str)+1);a++)
  505.     {
  506.         printf("%c",str[a-1]);
  507.         if(a%25==0)
  508.             printf("\n");
  509.     }
  510.     fclose(fp);    printf("\n");
  511.     return 0;

  512. }
  513. //主函数实现
  514. int main()
  515. {
  516.     Node *worker;
  517.     int flag=1;
  518.     worker = (Node*)malloc(sizeof(Node));
  519.     worker->next = NULL;
  520.     while(flag)
  521.     {
  522.         printf("\t元 件 信 息 管 理 系 统\n");
  523.         printf("=================菜 单==================\n ");
  524.         printf("|            1.添加元件信息             |\n ");
  525.         printf("|            2.修改元件信息             |\n ");
  526.         printf("|            3.显示元件信息             |\n ");
  527.         printf("|            4.查找元件信息             |\n ");
  528.         printf("|            5.删除元件信息             |\n ");
  529.         printf("|            6.读取元件信息             |\n ");
  530.         printf("|            7.统计元件信息             |\n ");
  531.         printf("|            0.退出                     |\n ");
  532.         printf("========================================\n ");
  533.         printf("输入你选择的序号:");
  534.         scanf("%d", &flag);
  535.         switch (flag)
  536.         {
  537.         case 0:  printf(" \n提示:退出系统!\n ");  break;
  538.         case 1:     Add(worker); save(worker);  break;           //添加元件信息,保存到文件中
  539.         case 2:  change(worker);  break;                      //修改元件信息
  540.         case 3:  Disp(worker);  break;                        //显示元件信息
  541.         case 4:  Cha_xun(worker);  break;                     //查询元件信息
  542.         case 5:  Delete(worker);  break;                      //删除元件信息
  543.         case 6:  Du_qu(worker);  break;                       //读取元件信息
  544.         case 7:  Tong_ji(worker);  break;                     //统计元件信息        
  545. ……………………

  546. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
元器件信息管理系统.zip (302.62 KB, 下载次数: 18)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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