运用结构体链表指针等写出实现增删改查统计文件等基本操作,代码如下
#include#include#include#include//定义一个药品
typedef struct _Medicine
{
char name[20];//药品名
int num;//药品编号
int price;//药品价格
int stock;//药品库存数量
int sell;//药品销量
} Medicine;
//节点
typedef struct _Node
{
Medicine med;
struct _Node* pNext;//指向下一个结点的指针
}Node;
//头结点
Node *g_pHead=NULL;//头结点
//欢迎
void Welcome();
//录入药品信息
void InputMedicine();
//打印药品信息
void PrintMedicine();
//保存药品信息
void SaveMedicine();
//读取药品信息
void ReadMedicine();
//查找药品信息
Node* FindMedicine();
//修改药品信息
void ModifyMedcine();
//删除药品信息
void DeleteMedicine();
//统计所有药品数量
int main()
{
while(1)
{
Welcome();//欢迎
//从键盘接收一个字符
char ch=getchar();
switch(ch)
{
case '1'://录入药品信息
InputMedicine();
break;
case '2'://打印药品信息
PrintMedicine();
break;
case '3'://保存药品信息
SaveMedicine();
system("pause");//暂停
system("cls");//清屏
break;
case '4'://读取药品信息
ReadMedicine();
break;
case '5'://统计所有药品数量
printf("药品总数为:%d\n",CountMedicine());
system("pause");//暂停
system("cls");//清屏
break;
case '6'://查找药品信息
{
Node* p = FindMedicine();
if(p!=NULL)
{
printf("药品编号:%d\t名称:%s\t价格:%d\t库存:%d\t销量:%d\n",p->med.num,p->med.name,p->med.price,p->med.stock,p->med.sell);
}
else
{
printf("没有找到该药品。\n");
}
system("pause");//暂停
system("cls");//清屏
break;
}
case '7'://修改药品信息
ModifyMedcine();
break;
case '8'://删除药品信息
DeleteMedicine();
break;
case '0'://退出系统
printf("再见,欢迎下次使用!\n");
return 0;
default:
printf("您的输入有误,请重新输入!\n");
system("pause");//暂停
system("cls");//清屏
break;
}
}
return 0;
}
//欢迎
void Welcome()
{
printf("***********************************************\n");
printf("* 请选择功能列表 *\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("* 8.删除药品信息 *\n");
printf("* 0.退出系统 *\n");
printf("***********************************************\n");
}
//录入药品信息
void InputMedicine()
{
//创建一个新节点
Node* pNewNode=(Node*)malloc(sizeof(Node));
pNewNode->pNext=NULL;
//头插法
if(g_pHead==NULL)
{
g_pHead=pNewNode;
}
else
{
pNewNode->pNext=g_pHead;
g_pHead=pNewNode;
}
printf("请输入药品的名称:\n");
scanf("%s",pNewNode->med.name);
printf("请输入药品的编号:\n");
scanf("%d",&pNewNode->med.num);
printf("请输入药品的价格:\n");
scanf("%d",&pNewNode->med.price);
printf("请输入药品的库存:\n");
scanf("%d",&pNewNode->med.stock);
printf("请输入药品的销量:\n");
scanf("%d",&pNewNode->med.sell);
printf("药品信息录入成功.\n");
system("pause");//暂停
system("cls");//清屏
}
//打印药品信息
void PrintMedicine()
{
system("cls");//清屏
printf("***********************************************\n");
printf("* 欢迎使用药品管理系统 *\n");
printf("***********************************************\n");
printf("* 编号 * 名称 * 价格 * 库存 * 销量 * \n");
printf("***********************************************\n");
//遍历链表
Node* p=g_pHead;
while(p!=NULL)
{
printf("* %d * %s * %d * %d * %d *\n",p->med.num,p->med.name,p->med.price,p->med.stock,p->med.sell);
p=p->pNext;
}
printf("***********************************************\n");
system("pause");//暂停
}
//保存药品信息
void SaveMedicine()
{
//打开文件
FILE* fp = fopen("D:\\shiyan.txt","w");
if (fp==NULL)
{
printf("打开文件失败。\n");
return;
}
//遍历链表
Node* p=g_pHead;
while(p!=NULL)
{
fwrite(&p->med,1,sizeof(Medicine),fp);
p=p->pNext;
}
//关闭文件
fclose(fp);
printf("\n数据保存成功\n");
}
//读取药品信息
void ReadMedicine()
{
//打开文件
FILE *fp=fopen("D:\\shiyan.txt","r");
if(fp==NULL)
{
printf("打开文件失败。\n");
return;
}
//读文件
Medicine med;
while (fread(&med,1,sizeof(Medicine),fp))
{
//创建一个新节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext=NULL;
memcpy(pNewNode,&med,sizeof(Medicine));
//头插法
if(g_pHead==NULL)
{
g_pHead=pNewNode;
}
else
{
pNewNode->pNext=g_pHead;
g_pHead=pNewNode;
}
}
//关闭文件
fclose(fp);
printf("加载数据成功。\n");
system("pause");//暂停
system("cls");//清屏
}
//删除药品信息
void DeleteMedicine()
{
int nMedNum;
printf("请输入要删除的药品的编号:\n");
scanf("%d",&nMedNum);
Node* p1,*p2;
//判断是不是头节点
if (g_pHead->med.num == nMedNum)
{
p1=g_pHead;
g_pHead=g_pHead->pNext;
free(p1);
return;
}
//不是头节点
Node* p=g_pHead;
while (p->pNext != NULL)
{
if(p->pNext->med.num == nMedNum)
{
p2=p->pNext;
p->pNext=p->pNext->pNext;
free(p2);
system("pause");//暂停
system("cls");//清屏
return;
}
p=p->pNext;
if(p->pNext==NULL)
{
break;
}
}
if(p->pNext==NULL)
{
printf("没有找到该药品。\n");
}
system("pause");//暂停
system("cls");//清屏
}
//查找药品信息
Node* FindMedicine()
{
int nMedNum;
char ypName[20];
printf("请输入要查找的药品的编号:\n");
scanf("%d",&nMedNum);
printf("请输入要查找的药品的名称:\n");
scanf("%s", ypName);
Node* p =g_pHead;
while(p!=NULL)
{
//strcmp字符串比较函数
if (p->med.num == nMedNum || 0 == strcmp(p->med.name, ypName))
{
return p;
}
p=p->pNext;
}
//没有找到
return NULL;
}
//修改药品信息
void ModifyMedcine()
{
int nMedNum;
printf("请输入需要修改的药品信息的编号:\n");
scanf("%d",&nMedNum);
Node* p =g_pHead;
while(p!=NULL)
{
//strcmp字符串比较函数
if (p->med.num == nMedNum)
{
printf("请输入要修改的药品名称 价格 库存 销量:\n");
scanf("%s %d %d %d",p->med.name,&p->med.price,&p->med.stock,&p->med.sell);
printf("修改成功。\n");
break;
}
p=p->pNext;
}
if (p==NULL)
{
printf("没有找到该药品信息。\n");
}
system("pause");//暂停
system("cls");//清屏
}
//统计所有药品数量
int CountMedicine()
{
int nCount=0;//药品总数
//遍历
Node* p=g_pHead;
while (p!=NULL)
{
nCount++;
p=p->pNext;
}
return nCount;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享题目:c语言课设——药品管理系统-创新互联
标题路径:https://www.cdcxhl.com/article16/dpgcdg.html
成都网站建设公司_创新互联,为您提供网站设计、软件开发、ChatGPT、网站建设、网站制作、云服务器
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联