运用结构体链表指针等写出实现增删改查统计文件等基本操作,代码如下
成都创新互联专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,成都天府联通服务器托管服务有保障!#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。内容未经允许不得转载,或转载时需注明来源: 创新互联