链表的维护与文件形式的保存

news/2024/11/29 13:40:00/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<malloc.h>
typedef struct goods{char name[20];        //家电名称char trademark[20];   //品牌char pirce[20];         //单价char count[20];         //数量struct goods *next;
}GOODS;
void MEAN();
void CHECK();
char WELCOME();
GOODS *CREATLIST(GOODS *r);
GOODS  *OUTLIST(GOODS *r);
GOODS *DELETELIST(GOODS *r);
GOODS *INSERTLIST(GOODS *r);
void SEARCHLIST(GOODS *r);
GOODS *UPDATELIST(GOODS *r);
void WRITELIST(GOODS *r);
GOODS *LOADLIST(GOODS *r);
GOODS *SORTLIST(GOODS *r);
FILE * fp;
void main(){                          //主函数char select,t;GOODS *r;r=(GOODS *)malloc(sizeof(GOODS));r=NULL;MEAN();CHECK();	do{system("cls");do{select=WELCOME();switch(select){case '1':system("cls");r=CREATLIST(r);break;case '2':system("cls");r=LOADLIST(r);break;case '3':system("cls");r=INSERTLIST(r);break;case '4':system("cls");r=DELETELIST(r);break;case '5':system("cls");SEARCHLIST(r);break;case '6':system("cls");r=UPDATELIST(r);break;case '7':system("cls");r=OUTLIST(r);break;case '8':system("cls");WRITELIST(r);break;case '0':exit(0);default  :system("pause");system("cls");printf(" * ===================================================================== *");printf("\n * 当前状态:请您重新选择!                                               *\n");}}while(select<0 || select>8);printf("继续操作请输入(y):");		getchar();t=getchar();}while(t=='y');
}
void MEAN(){            //登入菜单1long t;struct tm *st;char *ch;time(&t);ch=ctime(&t);st=localtime(&t);printf(" * ==================================================================  *");printf("\n *                                                                     *");printf("\n *                     欢迎使用家电库存管理系统                        *");printf("\n *                                                                     *");printf("\n *                                                                     *");printf("\n *                     当前系统日期:%d年%2d月%2d日                    *",st->tm_year+1900,st->tm_mon+1,st->tm_mday);printf("\n *                                                                     *");
}
void CHECK(){             //登入菜单2int check;char pass1[]="admin",pass[20],user[20];while(1){printf("\n * ==================================================================  *");printf("\n *                                                                     *");printf("\n *                              登 录 界 面                            *");printf("\n *                                                                     *");printf("\n * ==================================================================  *");printf("\n 1. 请输入帐号:");scanf ("%s",user);printf("\n 2. 请输入密码:");scanf ("%s",pass);check=strcmp(pass,pass1);if(check!=0){system("cls");printf(" * =================================================================== *");printf("\n * 当前状态:密码有误,请重新输入!  *");}else{system("cls");break;}}
}
char WELCOME(){    //主菜单char select;_flushall();printf(" * ======================================================================================================= *");printf("\n *                                            家电库存管理系统                                             *");printf("\n * ======================================================================================================= *");printf("\n * 1.创建表 2.开始营业(读取文件) 3.进货(插入) 4.提货(删除) 5.查询 6.更新 7.信息 8.营业结束(保存文件) 0.退出 *");printf("\n * ======================================================================================================= *");printf("\n 2. 请输入您的选择:");scanf("%c",&select);return select;
}
GOODS *CREATLIST(GOODS *r){      //创建表int i,j=0,k,n;GOODS *p,*s;printf("需要输入多少数据?\n");scanf("%d",&n);printf("请输入数据:\n");for(i=1;i<=n;i++){s=(GOODS *)malloc(sizeof(GOODS));printf("编号%d的家电名称:",i);scanf("%s",&s->name);while(s->name[j]!='\0')j++;for(k=j+1;k<20;k++)s->name[k]=' ';printf("编号%d的品牌:",i);scanf("%s",&s->trademark);j=0;while(s->trademark[j]!='\0')j++;for(k=j+1;k<20;k++)s->trademark[k]=' ';printf("编号%d的价格为:",i);scanf("%s",&s->pirce);j=0;while(s->pirce[j]!='\0')j++;for(k=j+1;k<20;k++)s->pirce[k]=' ';printf("编号%d的数量:",i);scanf("%s",&s->count);j=0;while(s->count[j]!='\0')j++;for(k=j+1;k<20;k++)s->count[k]=' ';s->next=NULL;//链表末尾结点指针置空if(r==NULL)  //若r=NULL,s直接赋给r;r=s;else{p=r;     //r!=NULL,找到r链表最后结点while(p->next!=NULL)p=p->next;p->next=s;}p=s;      //指针p总是指向链表结尾}return r;
}
GOODS  *OUTLIST(GOODS *r){           //信息输出GOODS *p;int i=1;r=SORTLIST(r); //将排序后的链表重新赋给rp=r;if(p==NULL)printf("error\n");else{printf("编号		家电名称	品牌		价格		数量\n");while(p!=NULL){printf("编号%d		",i);printf("%s\t\t",p->name);			printf("%s\t\t",p->trademark);printf("%s\t\t",p->pirce);printf("%s\t\t",p->count);printf("\n");p=p->next;i++;}}return r;
}
GOODS *DELETELIST(GOODS *r){      //删除int n,i=0;GOODS *p,*q;q=r;p=r;printf("你需要删除哪一位置?\n");scanf("%d",&n);if(n==1)      //若删除头结点,r直接指向下一个结点r=r->next;else{for(i=1;i<n;i++){  //寻找第i个结点,由q指出p=q;           //q所指结点的直接前驱由p指出q=q->next;if(q==NULL)printf("error\n"); //删除失败}p->next=q->next;          //删除第i个结点}free(q);return r;
}
GOODS *INSERTLIST(GOODS *r){       //插入int i=1,k,n,m=0;GOODS *p,*q;printf("需要插入哪一位置\n");scanf("%d",&n);	q=r;while(i<n && q!=NULL){q=q->next;i++;}if(i!=n || q==NULL)printf("error\n");else{p=(GOODS *)malloc(sizeof(GOODS));printf("编号%d的家电名称:",n);scanf("%s",&p->name);while(p->name[m]!='\0')m++;for(k=m+1;k<20;k++)p->name[k]=' ';printf("编号%d的品牌:",n);scanf("%s",&p->trademark);m=0;while(p->trademark[m]!='\0')m++;for(k=m+1;k<20;k++)p->trademark[k]=' ';printf("编号%d的价格:",n);scanf("%s",&p->pirce);m=0;while(p->pirce[m]!='\0')m++;for(k=m+1;k<20;k++)p->pirce[k]=' ';printf("编号%d的数量:",n);scanf("%s",&p->count);m=0;while(p->count[m]!='\0')m++;for(k=m+1;k<20;k++)p->count[k]=' ';if(n==1){//插入位置为头结点时,将r送给新结点的指针域,r指向新结点;p->next=r;r=p;}else{p->next=q->next;q->next=p;//将新链接点插在第i个链接点之后printf("\n");}}return r;
}
void SEARCHLIST(GOODS *r){         //搜索int i=1,n;GOODS *p;printf("你需要搜索哪一位置?\n");scanf("%d",&n);p=r;while(i<n && p!=NULL){      //找搜索结点p=p->next;i++;}if(i!=n || p==NULL)printf("error\n");else{printf("编号		家电名称	品牌		价格		数量\n");printf("编号%d		",n);printf("%s\t\t",p->name);			printf("%s\t\t",p->trademark);printf("%s\t\t",p->pirce);printf("%s\t\t",p->count);printf("\n");}
}
GOODS *UPDATELIST(GOODS *r){        //更新int i=1,k,n,m=0;GOODS *p;printf("你想更新哪一位置?\n");scanf("%d",&n);p=r;while(i<n && p!=NULL){p=p->next;i++;}if(i!=n || p==NULL)printf("error\n");else{printf("编号%d的家电名称:",n);scanf("%s",&p->name);while(p->name[m]!='\0')m++;for(k=m+1;k<20;k++)p->name[k]=' ';printf("编号%d的品牌:",n);scanf("%s",&p->trademark);m=0;while(p->trademark[m]!='\0')m++;for(k=m+1;k<20;k++)p->trademark[k]=' ';printf("编号%d的价格:",n);scanf("%s",&p->pirce);m=0;while(p->pirce[m]!='\0')m++;for(k=m+1;k<20;k++)p->pirce[k]=' ';printf("编号%d的数量:",n);scanf("%s",&p->count);m=0;while(p->count[m]!='\0')m++;for(k=m+1;k<20;k++)p->count[k]=' ';				}return r;
}
void WRITELIST(GOODS *r){           //保存FILE *fp;GOODS *s;if((fp=fopen("D:\\c语言\\data structure\\库存.txt","wb"))==NULL)printf("打开文件失败\n");else{GOODS *p;s=(GOODS *)malloc(sizeof(GOODS));p=r;while(p){memset(s,0,sizeof(GOODS));strcpy(s->name,p->name);strcpy(s->trademark,p->trademark);strcpy(s->pirce,p->pirce);strcpy(s->count,p->count);fwrite(s,sizeof(GOODS),1,fp);p=p->next;}printf("保存成功\n");}fclose(fp);
}
GOODS *LOADLIST(GOODS *r){       //载入FILE *fp;GOODS *p,*q,*s,*t;if((fp=fopen("D:\\c语言\\data structure\\库存.txt","ab+"))==NULL)printf("文件打开失败\n");else{s=(GOODS *)malloc(sizeof(GOODS));printf("家电名称	品牌	        价格	        数量\n");while(!feof(fp)){if(fread(s,sizeof(GOODS),1,fp)!=0){printf("%s\t\t%s\t\t%s\t\t%s\n",s->name,s->trademark,s->pirce,s->count);q=(GOODS *)malloc(sizeof(GOODS));strcpy(q->name,s->name);strcpy(q->trademark,s->trademark);strcpy(q->pirce,s->pirce);strcpy(q->count,s->count);p=q;p->next=NULL;if(r==NULL)r=p;    //此时p指针作为头结点位elset->next=p;t=p;        //指针变量t总是指向链表结尾}}fclose(fp);}return r;
}
GOODS *SORTLIST(GOODS *r){         //选择排序GOODS *pfirst,*ptail,*pminbefore,*pmin,*p;pfirst=NULL;while(r!=NULL){for(p=r,pmin=r;p->next!=NULL;p=p->next){//循环遍历链表中的结点,找出此时最小结点if(atoi(p->next->pirce)<atoi(pmin->pirce)){//atoi()字符串转换为整型,找到一个比当前pmin小的结点pminbefore=p;                    //保存找到结点的直接前驱pmin=p->next;                    //保存键值更小的结点}}if(pfirst==NULL){//如果有序链表为空链表pfirst=pmin; //第一次找到键值最小结点ptail=pmin;  //尾指针指向最后结点} else{             //不为空链表ptail->next=pmin; //把找到的最小结点放到最后,让尾指针的next指向pminptail=pmin;       //ptail也指向pmin}if(pmin==r)       //如果最小结点为头结点r=r->next;    elsepminbefore->next=pmin->next;   //pmin离开原链表}if(pfirst!=NULL)//有序链表pfirstptail->next=NULL;//最后结点后驱为空r=pfirst;return r;
}                     
  1. 登入界面:设计一个管理员密码,仅管理员可进入;
  2. 创建表:建立一个链表,增加数据信息;
  3. 读入文件:将之前的信息从文件中提取出来,展示给管理员查看,并以此为基础继续增删改查;
  4. 插入:选择插入位置并将需要插入的信息输入;
  5. 删除:选择删除位置,删除该位置的数据信息;
  6. 更新:选择需要更新的数据信息位置,并重新输入数据信息;
  7. 查询:选择需要查询的数据信息位置,并展示;
  8. 排序:按单价遍历链表的所有数据信息,并以升序排好;
  9. 信息:向管理员展示全部的已按单价升序排好的数据信息;
  10. 保存文件:将每天的新数据信息保存至文件中。

http://www.ppmy.cn/news/363367.html

相关文章

mysql商品表_MySQL----商品表及商品分类表例子

1.建库 2.建表 新建一个查询&#xff0c;粘贴下列代码&#xff0c;选中执行 #商品分类表 CREATE TABLE category( cid INT PRIMARY KEY, cname VARCHAR(50) ); #商品表 CREATE TABLE products( pid INT PRIMARY KEY, pname VARCHAR(50), price DOUBLE, flag VARCHAR(2), #是否上…

Java---设计【家电销售管理系统】

家电销售管理系统 设计要求实现代码运行结果 设计要求 设计家电销售管理系统&#xff0c;实现以下功能&#xff1a; &#xff08;1&#xff09;给4类家电各输入3个品牌的电器型号、价格和库存&#xff1b; &#xff08;2&#xff09;统计每类家电的平均价格&#xff0c;最高价和…

适合数码家电行业用的进销存,一个软件顶一百个人工不是梦

进销存是指企业管理中&#xff0c;对采购、入库、销售的动态管理过程。企业通过进销存系统&#xff0c;可以随时掌握从采购到销售一系列的信息流、资金流、乃至物流信息&#xff0c;以便做出此时商业活动的最佳决策&#xff0c;获得最大效益。 传统的Excel管理方式常常发现数据…

全球及中国家电用PET薄膜涂层钢卷市场前景形势与未来竞争规模展望报告2022版

全球及中国家电用PET薄膜涂层钢卷市场前景形势与未来竞争规模展望报告2022版 --------------------------------------- 《修订日期》&#xff1a;2021年12月 《报告价格》&#xff1a;纸质版:6500元 电子版:6800元 纸质电子:7000元 (有折扣&#xff09; 《专员对接》&#xff…

基于Java( Spring+SpringMVC+JDBC)+MySQL实现(Web)家电售后服务系统【100010064】

一、家电售后服务系统 1.1 背景 随着生活质量的提高&#xff0c;现在各家各户都在使用家电&#xff0c;但是在家电被购买之后&#xff0c;免不了会出现一些问题&#xff0c;需要厂家提供一些技术支持等&#xff0c;家电售后服务就成了厂家和用户之间一个重要的交流平台&#…

全球及中国嵌入式家电行业销售格局及竞争策略研究报告2021-2027年版

全球及中国嵌入式家电行业销售格局及竞争策略研究报告2021-2027年版 目录 2020年&#xff0c;全球嵌入式家电市场规模达到了 百万美元&#xff0c;预计2027年可以达到 百万美元&#xff0c;年复合增长率(CAGR)为 % (2021-2027)。中国市场规模增长快速&#xff0c;预计将由2020年…

家电行业APS如何选型?

目录 一、VUCA时代&#xff0c;家电行业面临哪些挑战&#xff1f; 二、家电行业如何选择APS产品&#xff1f; 三、从一个案例来剖析家电行业APS的选型和实施过程 四、最后总结 一、VUCA时代&#xff0c;家电行业面临哪些挑战&#xff1f; 近几年制造业对VUCA时代的到来有了更…

Java毕设_家电售后信息管理系统

家电售后信息管理系统 家电售后信息管理系统mysql数据库创建语句 家电售后信息管理系统oracle数据库创建语句 家电售后信息管理系统sqlserver数据库创建语句 家电售后信息管理系统springspringMVChibernate框架对象(javaBean,pojo)设计 家电售后信息管理系统springspringMVCmy…