C-商品管理系统
VS2017
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#pragma warning(disable:4996)
#define PRT printf("编号 名称 数量 价格\n");
#define PRT1 printf("%d%14s%8d%11.2lf\n", pp->id, pp->S_name, pp->S_num, pp->S_price);
typedef struct Commodity
{
int id; //编号
char S_name[10]; //商品名称
int S_num; //商品数量
double S_price; //商品价格
struct Commodity *next;
}comm;
comm *S_mphead = NULL; //头节点
int S_num = 0; //记录数量
void S_list(comm **p); //创建链表
void S_destroy(comm **p); //销毁链表
void S_main(void); //入口
void S_creat(comm *p); //录入记录
void S_search(comm *p); //查找记录
void S_delete(comm *p); //删除记录
void S_mod(comm *p); //修改记录
void S_insert(comm *p); //插入记录
void S_sort(comm *p); //排序记录
void S_stat(comm *p); //统计记录
int main(void)
{
S_list(&S_mphead);
S_main();
system("pause");
return 0;
}
//入口
void S_main(void)
{
int i;
char S_key1;
int S_key;
for (i = 0; i < 20; i++)
{
printf("-");
}
printf("商品管理系统");
for (i = 0; i < 20; i++)
{
printf("-");
}
printf("\n");
printf("| |\n");
printf("| |\n");
printf("| 1> 录入记录 |\n\n");
printf("| 2> 查找记录 |\n\n");
printf("| 3> 删除记录 |\n\n");
printf("| 4> 修改记录 |\n\n");
printf("| 5> 插入记录 |\n\n");
printf("| 6> 排序记录 |\n\n");
printf("| 7> 统计记录 |\n\n");
printf("| 0> 退出 |\n");
printf("| |\n");
printf("| |\n");
for (i = 0; i < 52; i++)
{
printf("-");
}
printf("\n");
printf("选择0-7:");
scanf("%d", &S_key);
getchar();
switch (S_key)
{
case 1:
S_creat(S_mphead);
break;
case 2:
S_search(S_mphead);
break;
case 3:
S_delete(S_mphead);
break;
case 4:
S_mod(S_mphead);
break;
case 5:
S_insert(S_mphead);
break;
case 6:
S_sort(S_mphead);
break;
case 7:
S_stat(S_mphead);
break;
case 0:
printf("是否退出(Y/N):");
S_key1 = getch();
if (S_key1 == 'y' || S_key1 == 'Y')
{
S_destroy(&S_mphead);
exit(1);
}
else if (S_key1 == 'n' || S_key1 == 'N')
{
system("cls");
S_main();
}
else
{
printf("输入有误!按任意键重新输入!");
getch();
system("cls");
S_main();
}
break;
default:
printf("输入有误,按任意键重新输入!");
getch();
system("cls");
S_main();
}
}
//创建链表
void S_list(comm **p)
{
*p = (comm *)malloc(sizeof(comm));
if ((*p) == NULL)
{
printf("链表创建失败!\n");
getchar();
exit(1);
}
(*p)->next = NULL;
}
//销毁链表
void S_destroy(comm **p)
{
comm *S_ptemp = NULL;
while ((*p)->next != NULL)
{
S_ptemp = (*p)->next;
(*p)->next = S_ptemp->next;
free(S_ptemp);
S_ptemp = NULL;
}
(*p) = NULL;
}
//录入记录
void S_creat(comm *p)
{
comm *phead = p;
comm *pp = NULL;
char S_key;
while (phead->next != NULL)
{
phead = phead->next;
}
pp = (comm *)malloc(sizeof(comm));
printf("请输入编号:\n");
scanf("%d", &pp->id);
getchar();
printf("请输入名称:\n");
scanf("%s", pp->S_name);
getchar();
printf("请输入数量:\n");
scanf("%d", &pp->S_num);
getchar();
printf("请输入单价:\n");
scanf("%lf", &pp->S_price);
getchar();
pp->next = NULL;
phead->next = pp;
phead = pp;
S_num++;
printf("录入成功!继续录入(Y/N):");
rst:
S_key = getch();
printf("\n");
if (S_key == 'y' || S_key == 'Y')
{
S_creat(S_mphead);
}
else if (S_key == 'n' || S_key == 'N')
{
system("cls");
S_main();
}
else
{
printf("输入有误!按任意键重新输入!");
getch();
goto rst;
}
}
//查找记录
void S_search(comm *p)
{
comm *pp = p->next;
int S_id;
printf("请输入编号:");
scanf("%d", &S_id);
getchar();
while (pp != NULL)
{
if (pp->id == S_id)
{
PRT;
PRT1;
printf("\n请按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
pp = pp->next;
}
printf("没有找到记录!按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
//删除记录
void S_delete(comm *p)
{
comm *pp = p;
comm *ptemp = NULL;
char S_key;
int S_id;
printf("请输入编号:");
scanf("%d", &S_id);
getchar();
while (pp->next != NULL)
{
if (pp->next->id == S_id)
{
PRT;
printf("%d%14s%8d%11.2lf\n", pp->next->id, pp->next->S_name, pp->next->S_num, pp->next->S_price);
printf("是否删除(Y/N):");
rst:
S_key = getch();
if (S_key == 'y' || S_key == 'Y')
{
ptemp = pp->next;
pp->next = ptemp->next;
free(ptemp);
ptemp = NULL;
printf("删除成功!请按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
else if (S_key == 'n' || S_key == 'N')
{
printf("请按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
else
{
printf("输入有误!按任意键重新输入!");
getch();
goto rst;
}
}
else
{
pp = pp->next;
}
}
printf("没有要删除的记录!请按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
//修改记录
void S_mod(comm *p)
{
comm *pp = p->next;
int S_id;
printf("请输入编号:");
scanf("%d", &S_id);
getchar();
while (NULL != pp)
{
if (pp->id == S_id)
{
printf("请输入名称:\n");
scanf("%s", pp->S_name);
getchar();
printf("请输入数量:\n");
scanf("%d", &pp->S_num);
getchar();
printf("请输入单价:\n");
scanf("%lf", &pp->S_price);
getchar();
printf("修改成功!按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
pp = pp->next;
}
printf("没有可修改的信息!按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
//插入记录
void S_insert(comm *p)
{
comm *p1 = p->next;
comm *pp = NULL;
int S_id;
printf("请输入插入位置编号:");
scanf("%d", &S_id);
getchar();
while (NULL != p1)
{
if (p1->id == S_id)
{
pp = (comm *)malloc(sizeof(comm));
printf("请输入编号:\n");
scanf("%d", &pp->id);
getchar();
printf("请输入名称:\n");
scanf("%s", pp->S_name);
getchar();
printf("请输入数量:\n");
scanf("%d", &pp->S_num);
getchar();
printf("请输入单价:\n");
scanf("%lf", &pp->S_price);
getchar();
pp->next = p1->next;
p1->next = pp;
printf("插入成功!按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
p1 = p1->next;
}
printf("没有此位置编号!按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
//排序记录
void S_sort(comm *p)
{
comm *pp = p->next;
comm *p1 = NULL;
comm *ptemp = NULL;
ptemp = (comm *)malloc(sizeof(comm));
while (NULL != pp)
{
p1 = pp->next;
while (NULL != p1)
{
if (pp->S_price < p1->S_price)
{
ptemp->id = p1->id;
strcmp(ptemp->S_name, p1->S_name);
ptemp->S_num = p1->S_num;
ptemp->S_price = p1->S_price;
p1->id = pp->id;
strcmp(p1->S_name, pp->S_name);
p1->S_num = pp->S_num;
p1->S_price = pp->S_price;
pp->id = ptemp->id;
strcmp(pp->S_name, ptemp->S_name);
pp->S_num = ptemp->S_num;
pp->S_price = ptemp->S_price;
}
p1 = p1->next;
}
pp = pp->next;
}
free(ptemp);
ptemp = NULL;
printf("排序完毕!按任意键返回主菜单!");
getch();
system("cls");
S_main();
}
//统计记录
void S_stat(comm *p)
{
comm *pp = p->next;
PRT;
while (pp != NULL)
{
PRT1;
pp = pp->next;
}
printf("总共%d条记录!\n", S_num);
printf("按任意键返回主菜单!");
getch();
system("cls");
S_main();
}