元器件信息管理系统
     
单片机源程序如下:
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- struct component
- {
- char identifier[15]; // 1、编号
- char type[15]; // 2、类型
- char model[15]; // 3、型号
- char number[15]; // 4、数目
- char enclosure[15]; // 5、封装
- char factory[15]; // 6、厂家
- char money[15]; // 7、价格
- char date[15]; // 8、生产日期
- };
- //类型定义语句
- typedef struct node
- {
- struct component data;
- struct node *next;
- }Node;
- //添加信息函数
- void Add(Node *worker)
- {
- Node *p, *q;
- char n[10];
- q = worker;
- while (q->next != NULL)
- {
- q = q->next;
- }
- while (1)
- {
- printf("提示:输入0返回主菜单!\n");
- printf("请输入编号:");
- scanf("%s", n);
- if (strcmp(n, "0") == 0)
- {
- break;
- }
- p = (Node *)malloc(sizeof(Node));
- strcpy(p->data.identifier, n);
-
- printf("请输入类型:");
- scanf("%s", p->data.type);
- printf("请输入型号:");
- scanf("%s", p->data.model);
- printf("请输入数目:");
- scanf("%s", p->data.number);
- printf("请输入封装:");
- scanf("%s", p->data.enclosure);
- printf("请输入厂家:");
- scanf("%s", p->data.factory);
- printf("请输入价格:");
- scanf("%s", p->data.money);
- printf("请输入生产日期:");
- scanf("%s", p->data.date);
- printf("提示:已经完成一条记录的添加!");
- p->next = NULL;
- q->next = p;
- q = p;
- }
- }
- //修改元件信息函数
- int change(Node *worker)
- {
- Node *p;
- char find[20];
- p = worker->next;
- if (p == NULL)
- {
- printf("\n提示:没有元件可以修改!\n");
- return 0;
- }
- printf("请输入要修改的编号");
- scanf("%s", find);
- while (p != NULL)
- {
- if (strcmp(p->data.identifier, find) == 0)
- {
- break;
- }
- p = p->next;
- }
- if(p!=NULL)
- {
- int x;
- while (1)
- {
- printf("完成修改请输入0,否则输入非0数字进行修改!");
- scanf("%d", &x);
- if (x == 0)
- {
- break;
- }
- printf(" 请输入新的编号: ");
- scanf("%s", p->data.identifier);
- printf(" 请输入新的元件类型: ");
- scanf("%s", p->data.type);
- printf(" 请输入新的元件型号: ");
- scanf("%s", p->data.model);
- printf(" 请输入新的元件数目: ");
- scanf("%s", p->data.number);
- printf(" 请输入新的元件封装: ");
- scanf("%s", p->data.enclosure);
- printf(" 请输入新的元件厂家: ");
- scanf("%s", p->data.factory);
- printf(" 请输入新的元件价格: ");
- scanf("%s", p->data.money);
- printf(" 请输入新的元件生产日期: ");
- scanf("%s", p->data.date);
- printf(" \n提示:该元器件资料已经修改!\n ");
- }
- }
- else
- printf("\n提示:没有你要修改的资料!\n ");
- }
- //显示元件信息函数
- int Disp(Node *worker)
- {
- Node *p;
- p = worker->next;
- if (p == NULL)
- {
- printf(" \n提示:没有信息可以显示!\n ");
- return 0;
- }
- printf("\t\t\t\t显示结果\n");
- printf(" \n编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- while (p!=NULL)
- {
- 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, p->data.number, p->data.enclosure, p->data.factory,
- p->data.money, p->data.date);
- p = p->next;
- }
- }
- //查询元件信息函数: 按职元件编号查询或按元件类型查询
- int Cha_xun(Node *worker)
- {
- Node *p;
- int sel,i=0;
- char find[20];
- p = worker->next;
- if (p==NULL)
- {
- printf(" \n提示:没有资料可以查询!\n ");
- return 0;
- }
- printf("\n提示:\n 0 退出\n1 按编号查询\n2 按元件类型 \n3 元件型号\n4 元件数目\n5 元件封装\n6 元件厂家\n7 元件价格\n8 元件生厂日期\n ");
- printf("请选择:");
- scanf("%d", &sel);
- if (sel == 1)
- {
- printf("\n请输入你要查询分类的编号:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data.identifier, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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, p->data.number, p->data.enclosure, p->data.factory,
- p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 2)
- {
- printf(" \n输入你要查询分类的元件编号:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data.type, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 3)
- {
- printf(" \n输入你要查询型号编号:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data.model, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 4)
- {
- printf(" \n输入你要查询的数目:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data. number, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 5)
- {
- printf(" \n输入你要查询的封装:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data. enclosure, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 6)
- {
- printf(" \n输入你要查询的厂家:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data. factory, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 7)
- {
- printf(" \n输入你要查询的价格:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data. money, find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
- else if (sel == 8)
- {
- printf(" \n输入你要查询的生产日期:");
- scanf("%s", find);
- while (p!=NULL)
- {
- if (strcmp(p->data.date , find) == 0)
- {
- printf(" 编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n ");
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money, p->data.date);
- i++;
- }
- p = p->next;
-
- }
- if(i==0)
- printf("查找的信息有误\n");
- }
-
- else if (sel == 0)
- return 0;
- }
- int Tong_ji(Node *worker)//统计元件信息
- {
- Node *p;
- int sel;
- char find[20];
- p = worker->next;
- if (p==NULL)
- {
- printf(" \n提示:没有资料可以查询!\n ");
- return 0;
- }
- printf("\n提示:\n输入 0---- 退出\n输入 1----按型号查询\n输入 2-----按元件类型 \n3 元件型号\n4 元件数目\n5 元件封装\n6 元件厂家\n7 元件价格\n8 元件生厂日期");
- printf("\n请选择:");
- scanf("%d", &sel);
- if (sel == 1)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.identifier,p->next->data.identifier )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种编号的元件\n",i);
- }
- else if (sel == 2)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.type,p->next->data.type )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种类型的元件\n",i);
- }
- else if (sel == 3)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.model,p->next->data.model )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种型号的元件\n",i);
- }
- else if (sel == 4)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.number,p->next->data.number )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种数目的元件\n",i);
- }
- else if (sel == 5)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.enclosure,p->next->data.enclosure )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种封装的元件\n",i);
- }
- else if (sel == 6)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.factory,p->next->data.factory )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种厂家的元件\n",i);
- }
- else if (sel == 7)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.money,p->next->data.money )==0)
- i--;
- p = p->next;
- }
- printf("共有%d种价格的元件\n",i);
- }
- else if (sel == 8)
- {
- int i=1;
- while (p->next!=NULL)
- {
- i++;
- if(strcmp(p->data.date,p->next->data.date)==0)
- i--;
- p = p->next;
- }
- printf("共有%d种生产日期的元件\n",i);
- }
- else if (sel == 0)
- return 0;
-
- }
- //删除元件信息函数
- int Delete(Node *worker)
- {
- Node *p, *r;
- char find[10];
- p = worker->next;
- if (p == NULL)
- {
- printf("提示:没有元件信息可以删除!\n ");
- return 0;
- }
- printf(" \n提示:请输入你要删除的元件编号!\n ");
- scanf("%s", find);
- while (p != NULL)
- {
- if (strcmp(p->data.identifier, find) == 0)
- {
- break;
- }
- p = p->next;
- }
- if (p!=NULL)
- {
- r = worker;
- while (r->next != p)
- {
- r = r->next;
- }
- r->next = r->next->next;
- printf("已成功删除\n");
- } else
- printf("系统中没有该信息\n");
- }
- //将职工信息保存到文件中
- void save(Node *worker)
- {
- int n;
- Node *p = NULL;
- char filename[16];
- FILE *fp;
- printf("是否保存到文件?( 1-----保存!,0-----不保存! )");
- scanf("%d", &n);
- if (n == 1)
- {
- if (worker->next == NULL)
- {
- printf(" 没有记录!");
- }
- else
- {
- p = worker->next;
- }
-
- printf("请输入要保存该信息的文件名:\n"); /*输入要保存的文件的名字*/
- scanf("%s",filename);
- fp=fopen(filename,"w");
- while (p != NULL)
- {
- 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,
- p->data.number, p->data.enclosure, p->data.factory, p->data.money,p->data.date);
- p = p->next;
- }
- fclose(fp);
- }
- }
- //读取元件信息
- void Du_qu(Node *worker)
- {
- int a;
- char filename[16];
- Node *p;
- FILE *fp;
- char str[1000]={0};
- printf("请输入存有元件信息的文件名:\n");
- scanf("%s",filename);
- if((fp=fopen(filename,"r"))==NULL)
- {
- printf("文件名错误!\n ");
- }
- fgets(str,1000,fp);
- printf("编号\t类型\t型号\t数目\t封装\t厂家\t价格\t生产日期\n");
- for(a=1;a<(strlen(str)+1);a++)
- {
- printf("%c",str[a-1]);
- if(a%25==0)
- printf("\n");
- }
- fclose(fp); printf("\n");
- return 0;
- }
- //主函数实现
- int main()
- {
- Node *worker;
- int flag=1;
- worker = (Node*)malloc(sizeof(Node));
- worker->next = NULL;
- while(flag)
- {
- printf("\t元 件 信 息 管 理 系 统\n");
- printf("=================菜 单==================\n ");
- printf("| 1.添加元件信息 |\n ");
- printf("| 2.修改元件信息 |\n ");
- printf("| 3.显示元件信息 |\n ");
- printf("| 4.查找元件信息 |\n ");
- printf("| 5.删除元件信息 |\n ");
- printf("| 6.读取元件信息 |\n ");
- printf("| 7.统计元件信息 |\n ");
- printf("| 0.退出 |\n ");
- printf("========================================\n ");
- printf("输入你选择的序号:");
- scanf("%d", &flag);
- switch (flag)
- {
- case 0: printf(" \n提示:退出系统!\n "); break;
- case 1: Add(worker); save(worker); break; //添加元件信息,保存到文件中
- case 2: change(worker); break; //修改元件信息
- case 3: Disp(worker); break; //显示元件信息
- case 4: Cha_xun(worker); break; //查询元件信息
- case 5: Delete(worker); break; //删除元件信息
- case 6: Du_qu(worker); break; //读取元件信息
- case 7: Tong_ji(worker); break; //统计元件信息
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
元器件信息管理系统.zip
(302.62 KB, 下载次数: 18)
|