#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define PATH "baocun"
typedef struct SPB
{
int seller_num;
int fit_num;
int building_num;
int count;
struct SPB* next;
} ListNode, * LinkList;
int main()
{ int i;
struct SPB* head = (struct SPB*)malloc(sizeof(struct SPB));
if (head == NULL)
{
printf("分配失败,程序结束");
exit(0);
}
head->next = NULL;
struct SPB* p = NULL;
p=head;
int ch = 0;
while (ch != 7)
{
printf("\nMUNU\n");//菜单
printf("add data---------1\n"); //增加
printf("delete data------2\n"); //删除
printf("update data------3\n"); //修改
printf("insert data------4\n"); //插入
printf("print linklist---5\n"); //输出
printf("baocun-----------6\n"); //保存
printf("exit ------------7\n"); //退出
printf("***********\n\n");
printf("请输入你的选择:");
scanf("%d", &ch);
if (ch == 1)
{
struct SPB pb; //struct SPB pf, * pb;
int i;
if (head == NULL)
continue;
else {
p = head;
while (p->next) p = p->next;
}
for (i = 0; i < 2; i++)
{
pb = (struct SPB*)malloc(sizeof(struct SPB));
if (NULL == pb)
{
printf("malloc fail!\n");
break; //return head;
}
pb->next = NULL;
printf("\nseller's number: ");
scanf("%d", &pb->seller_num);
printf("fit's number: ");
scanf("%d", &pb->fit_num);
printf("builiding's number: ");
scanf("%d", &pb->building_num);
printf("count's number: ");
scanf("%d", &pb->count);
p->next = pb;
p = pb;
}
}if (ch == 2)
{
int i, j = 0;
struct SPB q = NULL;
if (head == NULL)
continue;
else {
p = head;
}
do {
printf("请输入需删除的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到删除的项.\n");
else {
q->next = p->next;
free(p);
printf("\n第%d项删除成功.\n", i);
}
}
if (ch == 3)
{
int i, j = 0;
if (head == NULL)
continue;
else {
p = head;
}
do {
printf("请输入需修改的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到修改的项.\n");
else {
int sel;
do {
printf("\n请输入你要修改的数据 1,销售商号码 2,配件号 3,工地号 4,数量 :");
scanf("%d", &sel);
} while (sel < 1 || sel>4);
switch (sel) {
case 1:
printf("请输入新的销售商品号:");
scanf("%d", &p->seller_num);
break;
case 2:
printf("请输入新的配件号:");
scanf("%d", &p->fit_num);
break;
case 3:
printf("请输入新的工地号:");
scanf("%d", &p->building_num);
break;
case 4:
printf("请输入新的数量:");
scanf("%d", &p->count);
break;
default:
break;
}
printf("\n第%d项数据修改成功.\n", i);
}
}
if (ch == 4)
{
int i, j = 0;
if (head == NULL)
continue;
else {
p = head;
}
struct SPB q = NULL, * ib = (struct SPB)malloc(sizeof(struct SPB));
ib->next = NULL;
do {
printf("请输入插入的项序号(前插):");
scanf("%d", &i);
} while (i <= 0);
printf("\n请输入插入项的数据:\n");
printf("\nseller's number: ");
scanf("%d", &ib->seller_num);
printf("fit's number: ");
scanf("%d", &ib->fit_num);
printf("builiding's number: ");
scanf("%d", &ib->building_num);
printf("count's number: ");
scanf("%d", &ib->count);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
q->next = ib;
else {
ib->next = q->next;
q->next = ib;
}
printf("\n第%d项插入成功.\n", i);
}
if (ch == 5)
{
if (head->next == NULL)
continue;
else {
p = head->next;
}
printf("\n1.销售商号码\t2.配件号\t3.工地号\t4.数量\n");
while (p)
{
printf("%d\t\t%d\t\t%d\t\t%d\n", p->seller_num, p->fit_num, p->building_num, p->count);
p = p->next;
}
}
}
if(ch==6)
{
if (head == NULL)
{
printf("节点为空,保存失败\n%s\t%d\t%s\n", FILE, LINE, func);
}
//打开文件
FILE fp = fopen(PATH, "w");
if (fp == NULL)
{
printf("打开文件失败\n");
}
//保存操作
struct SPB bc = head->next;
while (bc != NULL)
{
fprintf(fp,"%d",bc->seller_num);
fprintf(fp,"%d",bc->fit_num);
fprintf(fp,"%d",bc->fit_num);
fprintf(fp,"%d",bc->building_num);
fprintf(fp,"%d",bc->count);
bc = bc->next;
}
//收尾处理
fclose(fp);
fp = NULL;
printf("保存成功");
}
return 0;
free(p);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define PATH "baocun"
typedef struct SPB
{
int seller_num;
int fit_num;
int building_num;
int count;
struct SPB *next;
} ListNode, *LinkList;
int main()
{
int i;
struct SPB *head = (struct SPB *)malloc(sizeof(struct SPB));
if (head == NULL)
{
printf("分配失败,程序结束");
exit(0);
}
head->next = NULL;
struct SPB *p = NULL;
p = head;
int ch = 0;
while (ch != 7)
{
printf("\nMUNU\n"); //菜单
printf("add data---------1\n"); //增加
printf("delete data------2\n"); //删除
printf("update data------3\n"); //修改
printf("insert data------4\n"); //插入
printf("print linklist---5\n"); //输出
printf("baocun-----------6\n"); //保存
printf("exit ------------7\n"); //退出
printf("***********\n\n");
printf("请输入你的选择:");
scanf("%d", &ch);
if (ch == 1)
{
struct SPB *pb; //struct SPB pf, * pb;
int i;
if (head == NULL)
continue;
else
{
p = head;
while (p->next)
p = p->next;
}
for (i = 0; i < 2; i++)
{
pb = (struct SPB *)malloc(sizeof(struct SPB));
if (NULL == pb)
{
printf("malloc fail!\n");
break; //return head;
}
pb->next = NULL;
printf("\nseller's number: ");
scanf("%d", &pb->seller_num);
printf("fit's number: ");
scanf("%d", &pb->fit_num);
printf("builiding's number: ");
scanf("%d", &pb->building_num);
printf("count's number: ");
scanf("%d", &pb->count);
p->next = pb;
p = pb;
}
}
if (ch == 2)
{
int i, j = 0;
struct SPB *q = NULL;
if (head == NULL)
continue;
else
{
p = head;
}
do
{
printf("请输入需删除的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到删除的项.\n");
else
{
q->next = p->next;
free(p);
printf("\n第%d项删除成功.\n", i);
}
}
if (ch == 3)
{
int i, j = 0;
if (head == NULL)
continue;
else
{
p = head;
}
do
{
printf("请输入需修改的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到修改的项.\n");
else
{
int sel;
do
{
printf("\n请输入你要修改的数据 1,销售商号码 2,配件号 3,工地号 4,数量 :");
scanf("%d", &sel);
} while (sel < 1 || sel > 4);
switch (sel)
{
case 1:
printf("请输入新的销售商品号:");
scanf("%d", &p->seller_num);
break;
case 2:
printf("请输入新的配件号:");
scanf("%d", &p->fit_num);
break;
case 3:
printf("请输入新的工地号:");
scanf("%d", &p->building_num);
break;
case 4:
printf("请输入新的数量:");
scanf("%d", &p->count);
break;
default:
break;
}
printf("\n第%d项数据修改成功.\n", i);
}
}
if (ch == 4)
{
int i, j = 0;
if (head == NULL)
continue;
else
{
p = head;
}
struct SPB *q = NULL, *ib = (struct SPB *)malloc(sizeof(struct SPB));
ib->next = NULL;
do
{
printf("请输入插入的项序号(前插):");
scanf("%d", &i);
} while (i <= 0);
printf("\n请输入插入项的数据:\n");
printf("\nseller's number: ");
scanf("%d", &ib->seller_num);
printf("fit's number: ");
scanf("%d", &ib->fit_num);
printf("builiding's number: ");
scanf("%d", &ib->building_num);
printf("count's number: ");
scanf("%d", &ib->count);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
q->next = ib;
else
{
ib->next = q->next;
q->next = ib;
}
printf("\n第%d项插入成功.\n", i);
}
if (ch == 5)
{
if (head->next == NULL)
continue;
else
{
p = head->next;
}
printf("\n1.销售商号码\t2.配件号\t3.工地号\t4.数量\n");
while (p)
{
printf("%d\t\t%d\t\t%d\t\t%d\n", p->seller_num, p->fit_num, p->building_num, p->count);
p = p->next;
}
}
if (ch == 6)
{
if (head == NULL)
{
printf("节点为空,保存失败\n%s\t%d\t%s\n", __FILE__, __LINE__, __func__);
}
//打开文件
FILE *fp = fopen(PATH, "w");
if (fp == NULL)
{
printf("打开文件失败\n");
continue;
}
//保存操作
struct SPB *bc = head->next;
while (bc != NULL)
{
fprintf(fp, "%d ", bc->seller_num);
fprintf(fp, "%d ", bc->fit_num);
fprintf(fp, "%d ", bc->fit_num);
fprintf(fp, "%d ", bc->building_num);
fprintf(fp, "%d ", bc->count);
fprintf(fp, "\n");
bc = bc->next;
}
//收尾处理
fclose(fp);
fp = NULL;
printf("保存成功");
}
}
// 释放操作
p = head;
while (p) {
struct SPB *q = p->next;
free(p);
p = q;
}
return 0;
}
其实问题不大,主要是ch == 6写在了while的外面
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define PATH "baocun"
typedef struct SPB
{
int seller_num;
int fit_num;
int building_num;
int count;
struct SPB *next;
} ListNode, *LinkList;
int main()
{
int i;
struct SPB *head = (struct SPB *)malloc(sizeof(struct SPB));
if (head == NULL)
{
printf("分配失败,程序结束");
exit(0);
}
head->next = NULL;
struct SPB *p = NULL;
p = head;
int ch = 0;
while (ch != 7)
{
printf("\nMUNU\n"); //菜单
printf("add data---------1\n"); //增加
printf("delete data------2\n"); //删除
printf("update data------3\n"); //修改
printf("insert data------4\n"); //插入
printf("print linklist---5\n"); //输出
printf("baocun-----------6\n"); //保存
printf("exit ------------7\n"); //退出
printf("***********\n\n");
printf("请输入你的选择:");
scanf("%d", &ch);
if (ch == 1)
{
struct SPB *pb; //struct SPB pf, * pb;
int i;
if (head == NULL)
continue;
else
{
p = head;
while (p->next)
p = p->next;
}
for (i = 0; i < 2; i++)
{
pb = (struct SPB *)malloc(sizeof(struct SPB));
if (NULL == pb)
{
printf("malloc fail!\n");
break; //return head;
}
pb->next = NULL;
printf("\nseller's number: ");
scanf("%d", &pb->seller_num);
printf("fit's number: ");
scanf("%d", &pb->fit_num);
printf("builiding's number: ");
scanf("%d", &pb->building_num);
printf("count's number: ");
scanf("%d", &pb->count);
p->next = pb;
p = pb;
}
}
if (ch == 2)
{
int i, j = 0;
struct SPB *q = NULL;
if (head == NULL)
continue;
else
{
p = head;
}
do
{
printf("请输入需删除的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到删除的项.\n");
else
{
q->next = p->next;
free(p);
printf("\n第%d项删除成功.\n", i);
}
}
if (ch == 3)
{
int i, j = 0;
if (head == NULL)
continue;
else
{
p = head;
}
do
{
printf("请输入需修改的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到修改的项.\n");
else
{
int sel;
do
{
printf("\n请输入你要修改的数据 1,销售商号码 2,配件号 3,工地号 4,数量 :");
scanf("%d", &sel);
} while (sel < 1 || sel > 4);
switch (sel)
{
case 1:
printf("请输入新的销售商品号:");
scanf("%d", &p->seller_num);
break;
case 2:
printf("请输入新的配件号:");
scanf("%d", &p->fit_num);
break;
case 3:
printf("请输入新的工地号:");
scanf("%d", &p->building_num);
break;
case 4:
printf("请输入新的数量:");
scanf("%d", &p->count);
break;
default:
break;
}
printf("\n第%d项数据修改成功.\n", i);
}
}
if (ch == 4)
{
int i, j = 0;
if (head == NULL)
continue;
else
{
p = head;
}
struct SPB *q = NULL, *ib = (struct SPB *)malloc(sizeof(struct SPB));
ib->next = NULL;
do
{
printf("请输入插入的项序号(前插):");
scanf("%d", &i);
} while (i <= 0);
printf("\n请输入插入项的数据:\n");
printf("\nseller's number: ");
scanf("%d", &ib->seller_num);
printf("fit's number: ");
scanf("%d", &ib->fit_num);
printf("builiding's number: ");
scanf("%d", &ib->building_num);
printf("count's number: ");
scanf("%d", &ib->count);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
q->next = ib;
else
{
ib->next = q->next;
q->next = ib;
}
printf("\n第%d项插入成功.\n", i);
}
if (ch == 5)
{
if (head->next == NULL)
continue;
else
{
p = head->next;
}
printf("\n1.销售商号码\t2.配件号\t3.工地号\t4.数量\n");
while (p)
{
printf("%d\t\t%d\t\t%d\t\t%d\n", p->seller_num, p->fit_num, p->building_num, p->count);
p = p->next;
}
}
if (ch == 6)
{
if (head == NULL)
{
printf("节点为空,保存失败\n");
}
//打开文件
FILE *fp = fopen("a.txt", "w");
if (fp == NULL)
{
printf("打开文件失败\n");
}
//保存操作
struct SPB *bc = head->next;
while (bc != NULL)
{
fprintf(fp, "%d", bc->seller_num);
fprintf(fp, "%d", bc->fit_num);
fprintf(fp, "%d", bc->building_num);
fprintf(fp, "%d", bc->count);
fprintf(fp,"\n");
bc = bc->next;
}
//收尾处理
fclose(fp);
fp = NULL;
printf("保存成功");
}
}
return 0;
free(p);
}