运用结构体链表指针等写出实现增删改查统计文件等基本操作,代码如下
#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("药品总数为:%dn",CountMedicine()); system("pause");//暂停 system("cls");//清屏 break; case '6'://查找药品信息 { Node* p = FindMedicine(); if(p!=NULL) { printf("药品编号:%dt名称:%st价格:%dt库存:%dt销量:%dn",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; }



