⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common1.h

📁 链表维护与文件保存程序实现,主要针对C语言数据结构而实现
💻 H
字号:
#include<common0.h>
typedef struct LNode {						// 节点类型和指针类型
int recnum;
char elecname[10];
char brand[10];
char stylesize[10];
int price;
int number;
struct LNode *next;
} LNode, *Linklist; 

typedef struct {							// 有序链表类型
Linklist head,tail;
int size;
int curpos;
Linklist current;
} Orderlist; 

int InitList(Orderlist &L) {
int i=0;
L.head=new LNode;
if (!L.head)  return FALSE;
L.head->recnum=0;
// 以下为头指针节点数据域清零
for (i=0;i<=9;i++) {
L.head->elecname[i]='\0';
L.head->brand[i]='\0';
L.head->stylesize[i]='\0';
} //end_for
L.head->price=0;
L.head->number=0;
L.head->next=NULL;
L.current=L.tail=L.head;
L.curpos=L.size=0;
return TRUE;
} //InitList

void DestroyList(Orderlist &L) {
Linklist p;
while (L.head->next) {
p=L.head->next;
L.head->next=p->next;
delete p;
} //end_while
delete L.head;
} //DestroyListvoid

void CreatList(Orderlist &L) {
char ch=0;
Linklist p,q,t;
p=new LNode;
printf("请输入产品序号:");scanf("%d",&p->recnum);
printf("\n请输入电器种类:");scanf("%s",p->elecname);
printf("\n请输入品牌名称:");scanf("%s",p->brand);
printf("\n请输入样式型号:");scanf("%s",p->stylesize);
printf("\n请输入产品价格:");scanf("%d",&p->price);
printf("\n请输入产品数量:");scanf("%d",&p->number);
L.curpos=L.size=1;
p->next=NULL;
L.head->next=p;
L.current=p;
printf("继续输入吗?(y/n)\n");ch=getch();
while(ch=='y') {
t=new LNode;
printf("请输入产品序号:");scanf("%d",&t->recnum);
printf("\n请输入电器种类:");scanf("%s",t->elecname);
printf("\n请输入品牌名称:");scanf("%s",t->brand);
printf("\n请输入样式型号:");scanf("%s",t->stylesize);
printf("\n请输入产品价格:");scanf("%d",&t->price);
printf("\n请输入产品数量:");scanf("%d",&t->number);
L.size=L.size+1;
q=new LNode;
q=L.head->next;
if(q->next==NULL) {
if (t->price<q->price) {
t->next=q;
L.head->next=t;
}
else {
q->next=t;
t->next=NULL;
}
} //end_if
else {
if (t->price<=q->price) {
t->next=q;
L.head->next=t;
}
else {
L.head->next=q;
while((q->next!=NULL)&&(t->price>q->next->price))
q=q->next;
t->next=q->next;
q->next=t;
} //end_else
} //end_else
printf("继续输入吗?(y/n)\n");ch=getch();
} //end_while
L.current=L.head->next;					// 链表创建完毕,已排序,当前指针指向最前
} //CreatList

void TraverseList(Orderlist L) {
Linklist j;
j=new LNode;
j=L.head->next;
printf("产品序号  电器种类    品牌名称    样式型号    产品价格   产品数量\n");
while (j!=NULL) {
printf("%5d      %-10s   %-10s%-10s     %-5d      %-5d\n",
j->recnum,j->elecname,j->brand,j->stylesize,j->price,j->number);
j=j->next;
} //end_while
} //TraverseList

void TraverseList2(Orderlist L,int e) {
Linklist j;
j=new LNode;
j=L.head->next;
while (j!=NULL) {
if (j->recnum==e) printf("%5d      %-10s   %-10s%-10s     %-5d      %-5d\n",
j->recnum,j->elecname,j->brand,j->stylesize,j->price,j->number);
j=j->next;
} //end_while
} //TraverseList2

void SaveMain(Orderlist L) {
FILE *fp;
Linklist p;
p=new LNode;
if ((fp=fopen("mainlist","wb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
putw(L.size,fp);
for(p=L.head->next;p!=NULL;p=p->next) 
if(fwrite(p,sizeof(struct LNode),1,fp)!=1)  printf("File write error!\n");
fclose(fp);
} //SaveMain

void OpenMain(Orderlist &L) {
// Orderlist OL;
// InitList(OL);
int i;
FILE *fp;
Linklist p;
if ((fp=fopen("mainlist","rb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
i=getw(fp);
do {
p=new LNode;
fread(p,sizeof(struct LNode),1,fp);
L.size=L.size+1;
if (L.size==1)  L.head->next=p;
else  L.current->next=p;
L.current=p;
} while (L.size<i);
L.tail=p;
L.tail->next=NULL;
L.current=L.head->next;
} //OpenMain
void InsertList(Orderlist &L) {
TraverseList(L);
Linklist p,q,t;
p=new LNode;
printf("请输入产品序号:"); scanf("%d",&p->recnum);
q=new LNode;
q=L.head->next;
while (q!=NULL) {
if (p->recnum==q->recnum) {
printf("数据重复!请重新输入数据!\n");
printf("请输入产品序号:"); scanf("%d",&p->recnum);break;}
else q=q->next;
} //end_while
printf("\n请输入电器种类:");scanf("%s",p->elecname);
printf("\n请输入品牌名称:");scanf("%s",p->brand);
printf("\n请输入样式型号:");scanf("%s",p->stylesize);
printf("\n请输入产品价格:");scanf("%d",&p->price);
printf("\n请输入产品数量:");scanf("%d",&p->number);
L.size=L.size+1;
t=new LNode;
t=L.head->next;
if (p->price<=t->price) {
L.head->next=p;
p->next=t;
}
else {
L.head->next=t;
while ((t->next!=NULL)&&(p->price>t->next->price))  t=t->next;
p->next=t->next;
t->next=p;
} //end_else
L.current=L.head->next;
} //InsertList

void InsertList2(Orderlist &L,Linklist n) {
Linklist p,t;
p=new LNode;
p=n;
L.size=L.size+1;
t=new LNode;
t=L.head->next;
if (p->price<=t->price) {
L.head->next=p;
p->next=t;
}
else {
L.head->next=t;
while ((t->next!=NULL)&&(p->price>t->next->price))  t=t->next;
p->next=t->next;
t->next=p;
} //end_else
L.current=L.head->next;
} //InsertList2

void DeleteList(Orderlist &L) {
int i=0,e=0;
char c=0;
Linklist m;
TraverseList(L);
printf("请输入要删除的记录号码:"); scanf("%d",&e);
printf("确认删除吗?(y/n)\n"); c=getch();
if (c=='n')  goto quit;
m=new LNode;
m=L.head->next;
if (L.head->next->recnum==e) {
L.head->next=m->next;
--L.size;
}
else {
L.head->next=m;
for (i=2;i<=L.size;i++) {
if (m->next->recnum==e) {
m->next=m->next->next;
--L.size;break;
}
else m=m->next;
} //end_for
} //end_else
if (i==L.size+1)  printf("没有符合要求的记录!删除失败!\n");
L.current=L.head->next;
quit:L.current=L.head->next;
} //DeleteList

void DeleteList2(Orderlist &L,int e) {
int i=0;
Linklist m;
m=new LNode;
m=L.head->next;
if (L.head->next->recnum==e) {
L.head->next=m->next;
--L.size;
}
else {
L.head->next=m;
for (i=2;i<=L.size;i++) {
if (m->next->recnum==e) {
m->next=m->next->next;
--L.size;
break;
}
else m=m->next;
} //end_for
} //end_else
if ((i==L.size+1)&&(m->next!=NULL))  printf("没有符合要求的记录!删除失败!\n");
L.current=L.head->next;
} //DeleteList

void ModifyList(Orderlist &L) {
int e=0,i=0,tempnum=0;
char tempch[10];
char ch1=0,ch2=0;
Linklist p,q;
start : TraverseList(L);
printf("请输入要修改的记录号码:"); scanf("%d",&e);
p=new LNode;
p=L.head->next;
for (i=1;i<=L.size;i++) {
if (p->recnum==e)  break;
else p=p->next;
} //end_for
if (i==L.size+1) {
printf("没有符合要求的记录!修改失败!\n");
goto quit;
}
printf("请输入要修改的项目:\n");
printf("1.电器种类;2.品牌名称;3.样式型号;4.产品价格;5.产品数量;\n");
ch1=getch();
switch(ch1) {
case '1': {
printf("请输入新的电器种类:");
scanf("%s",tempch);
strcpy(p->elecname,tempch);
break;
};
case '2': {
printf("请输入新的品牌名称:");
scanf("%s",tempch);
strcpy(p->brand,tempch);
break;
};
case '3': {
printf("请输入新的样式型号:");
scanf("%s",tempch);
strcpy(p->stylesize,tempch);
break;
};
case '5': {
printf("请输入新的产品数量:");
scanf("%d",&tempnum);
p->number=tempnum;
break;
};
case '4': {
q=new LNode;
q=p;
printf("请输入新的产品价格:");
scanf("%d",&tempnum);
q->price=tempnum;
DeleteList2(L,p->recnum);
InsertList2(L,q);
break;
} //end_case'4'
}//end_switch
printf("继续修改吗?(y/n)\n");
ch2=getch();
if (ch2=='y')  goto start;
quit:L.current=L.head->next;
}//ModifyList

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -