这个东东第一次才开始写的时候,脑子都是懵的,把我的方法和解决办法写出来,希望可以对你有一点帮助。

逻辑方面

可以先想想,我需要这个系统实现什么功能,就药店管理系统来讲,这个我觉得增删改查是必须的,再加一个补货提醒,剩下的就是什么几家药店一起搞,这样用户知道库存和药店位置可以做出最优选择。然后搞了两个端口进行,一个用户端,一个工作人员端口,这样的话显示菜单不同,功能也可以分开实现。(这里可以写三个文本,一个存药店信息,一个存药品信息,一个存所有的用户和工作人员的ID和密码)。

代码实现

按照运行显示顺序排列代码
1.结构体建立(一共三个,药品,药店,用户信息)

typedef struct medicine    //药品信息结构体
{char name[10];    //药品名 int  num;         //药品编号 int  drugstore_num;  //药店编号 float price;     //药品价格 int stock;        //药品库存数量 int sell;         //药品销量 char effect[10];  //药品功效 struct medicine *next; } medicine;
typedef struct place   //药店信息结构体
{int num;    //药店编号char address[20];   //药店地址struct place *next;
}place;
typedef struct user       //用户信息结构体
{char name[10];    //用户名int flag1;        //标记是客户还是员工 char password[10];    //用户密码struct user *next;
}user;

2.链接三个文件
三个文件分别用三个链表链起来,功能实现方面就简单很多,这里为了方便我就放一个就好了(将三个药店链起来)
文件里面一定要有内容 emmmm 要是出现文件不存在可以试试把r换成w运行一遍后再换回来,换回来后记得回去吧文件里的内容补上(要是有大佬知道更好的解决办法,能否教一下,我也想知道怎么更好解决)

void place_txt()        //将店铺连接起来
{FILE *fp;fp=fopen("place.txt","r+");if(NULL == fp){printf("文件不存在\n");exit(1);} place *p,*q;place_head=(place *)malloc(sizeof(place));place_head->next=NULL;p=(place *)malloc(sizeof(place));p->next=NULL;while(fscanf(fp,"%s %d",p->address,&p->num)!=EOF){if(place_head->next==NULL)place_head->next=p;elseq->next=p;q=p;p=(place *)malloc(sizeof(place));p->next=NULL;}fclose(fp);
}

3.主菜单
这个主要是登录,注册和退出系统
介于本人喜欢的颜色和不想看太繁琐的就加了清屏和改了颜色 这个看个人喜欢

system("cls");    //清屏函数
system("pause");   //点击一下进行下一功能
system("color 0F")  //改背景和字体颜色

前面数字改背景颜色 0=黑 1=蓝 2=绿 3=湖蓝 4=红 5=紫 6=黄 7=白 8=灰 9=淡蓝 后面是字体颜色A=淡绿 B=浅淡绿 C=淡红 D=淡紫 E=淡黄 F=亮白
下面是主菜单代码

void main_menu()          //主菜单栏
{system("cls\n");int n; printf("\n\t\t-----欢迎来到药店管理系统-----\n\n");system("color 0B");printf("\t\t***** 1 登录          *****\n");printf("\t\t***** 2 注册          *****\n");printf("\t\t***** 3 退出系统      *****\n");printf("\n\t\t输入您所要进行的功能序号:");do{scanf("%d",&n);switch(n){case 1:{log_on(); break;}case 2:{ post();  break; }case 3:{ sign_out();  break;}default:printf("输入指令不存在请重新输入:\n");}}while(n<1||n>3);
}

while里面内个控制,看自己的系统功能多少进行改变即可

4.登录系统
终于到登录系统了,嘿嘿嘿,本人在此和注册系统加了一个加密和控制条件,就是现在普遍见到的输入密码出现的是*。

int log_on()             //登录系统
{system("cls");system("color 0E");user *p=user_head->next;int flag=1,i=0,j=0;char a[10],b[11];char c=0;printf("\n\t\t---------欢迎您使用---------\n\t\t");fflush(stdin);do{printf("您有%d次机会输入\n\t\t",3-j);printf("请输入您的用户名:\n\t\t"); scanf("%s",a);printf("\t\t请输入您的账户密码:\n\t\t");i=0;p=user_head->next;while(i<10&&c!=13)   //13  回车{c=getch();if((c>47&&c<58)||(c>96&&c<123)){b[i++]=c;putchar('*');}b[10]='\0';} while(p!=NULL){if(strcmp(a,p->name)==0&&strcmp(b,p->password)==0){flag=0;break;}elsep=p->next;}if(flag){printf("\n\t\t密码或用户名错误请重试\n");j++;}else{printf("\n\t\t登陆成功,即将跳转至菜单");break;}}while(j!=3);if(j==3){printf("\n\t\t三次机会用完将跳转至注册页面");system("pause");post();} else{if(p->flag1==1111){system("pause");customer_menu();}else{ system("pause");user_menu();}}
}

这里给个建议,写的时候一定要写一个函数测试一下。(不要问,问了全都是泪)还有就是内个*密码内个,需要头文件,会在最后进行头文件汇总的不用担心。
5.注册系统

void post()              //注册系统
{system("color 0D");int i=0,n=0;char a[10],b[11];char c=0; system("cls");printf("\n\t欢迎使用注册系统\n");while(1){printf("\n\t请输入用户名(不超过10个字符):\n\t");scanf("%s",a);if(exist(a)==0){printf("\n\t该用户已存在,请重新输入:");continue; }if(strlen(a)<=10){printf("\n\t请输入十位密码,密码可由数字和小写字母组成:\n\t");while(i<10&&c!=13)   //13  回车{c=getch();if((c>47&&c<58)||(c>96&&c<123)){b[i++]=c;putchar('*');}b[10]='\0';}  printf("\n\t请输入邀请码(客户邀请码为1111)");  scanf("%d",&n);}else printf("\n\t您输入的用户长度为%d,请重新输入(不超过10位):\n\n",strlen(a));if(n!=0)break;}printf("\n\n\t系统会自动将用户名和密码存入使用者的文件中!\n");FILE *fp;                            //将新用户的昵称和密码保存到用户信息文件中 fp = fopen("user.txt","a+");if(NULL == fp){printf("\t文件不存在\n");exit(1);}fprintf(fp," %s %d %s",a,n,b);fclose(fp);system("pause");main_menu();
}
int sign_out()           //退出系统
{system("cls");printf("\n\t\t感谢您使用本系统,欢迎下次使用");system("pause");return 0;
}

这里就会可能万一用户名相同怎么办,当然我加了一个函数防止这个问题发生。(全都是我出现的问题)。

int exist(char name[])    //判断用户名是否存在
{user *p;            p=user_head; while(p!=NULL){if(strcmp(p->name ,name)==0){return 0;  }p=p->next ;}return 1;
}

6.退出系统

int sign_out()           //退出系统
{system("cls");printf("\n\t\t感谢您使用本系统,欢迎下次使用");system("pause");return 0;
}

7.客户菜单栏
啊,终于迎来了第一个端口,但是好像除了不同方式查看药品和药店位置,我好像也想不出来别的功能了。(网上买药这个东东考虑过,有别的功能欢迎补充)

void customer_menu()     //顾客菜单栏
{system("color 0B");system("cls\n");int n=0;printf("\n\t\t-----------**药店欢迎您-----------\n\n");printf("\t\t*****1.按药品名查询*******\n");printf("\t\t*****2.按药店编号查询*****\n"); printf("\t\t*****3.返回上一目录*******\n");printf("\n\t\t----------------------------------\n");do{printf("\t\t");printf("请输入所要操作的指令编号(1位):"); scanf("%d",&n);switch(n){case 1:{cus_finddrugs1();break;}case 2:{cus_finddrugs2();break;}case 3:{main_menu();break;}default:printf("输入指令不存在,请重新输入:");}}while(n<1||n>3);
}

顺势把里面的功能也放进来吧

void cus_finddrugs1()     //客户端查找药品 (药品名查找)
{system("color 0F");system("cls");int flag=1;char a[10]; printf("\n\n\t\t输入所需查找药品的名称:\n\t\t");scanf("%s",a);system("cls"); medicine *p=medicine_head->next;while(p!=NULL){if(strcmp(p->name,a)==0){flag=0;printf("--------------------------------------------------------\n");printf("\t药品名称:%s\n",p->name);printf("\t药品编号:%d\n",p->num);printf("\t药品价格:%.2f\n",p->price);printf("\t药店编号:%d\n",p->drugstore_num);printf("\t药品当前药店库存:%d\n",p->stock);printf("\t药品功效:%s\n",p->effect);printf("--------------------------------------------------------\n");}p=p->next;} if(flag)printf("查无此药\n");printf("点击返回菜单");system("pause");customer_menu();
}
void cus_finddrugs2()      //客户端查找药品(药店名查找)
{system("color 0E");int n,flag=0;char m[20];system("cls\n");printf("\n\t\t------------------------------------------\n");place *p=place_head->next;while(p!=NULL){printf("\t\t%s %d\n",p->address,p->num);p=p->next;}medicine *q;printf("\t\t输入所要查找的药店编号:");do{scanf("%d",&n);if(n<1||n>4)printf("\n\t\t此药店编号无效,请重新输入:\n");}while(n<1||n>4);system("cls");printf("\n\t\t请输入要查找的药品名称:");scanf("%s",m);q=medicine_head->next;while(q!=NULL){if(q->drugstore_num==n&&strcmp(q->name,m)==0){flag=0;printf("\n\n--------------------------------------------------------\n");printf("\t\t药品名称:%s\n",q->name);printf("\t\t药品编号:%d\n",q->num);printf("\t\t药品价格:%.2f\n",q->price);printf("\t\t药店编号:%d\n",q->drugstore_num);printf("\t\t药品当前药店库存:%d\n",q->stock);printf("\t\t药品功效:%s\n",q->effect);printf("--------------------------------------------------------\n");break;}q=q->next;} if(flag)printf("\t\t查无此药\n");printf("点击鼠标返回菜单");system("pause");customer_menu();
}

有个小错误(太傻了这个错误),当时自己心血来潮,把药店编号改成11 12 13,却忘了当时写代码时定了最多四个药店控制条件也是1——4。
8.工作人员端口
菜单

void user_menu()     //经理端菜单栏
{ system("color 0B");int  i;system("cls");printf("\t\t*******药品管理系统********\n");printf("\t\t     1.增加药品       \n");printf("\t\t     2.查找药品       \n");printf("\t\t     3.所有药品信息       \n");printf("\t\t     4.药品销量       \n");printf("\t\t     5.查看所需补货商品      \n");printf("\t\t     6.收银       \n");printf("\t\t     7.返回上一界面\n");printf("\t\t**************************\n");printf("\t\t--------------------------\n");printf("\t\t请输入所操作程序编号:\n\t\t");do{ scanf("%d",&i);printf("\t\t");system("pause");switch(i){case 1:{adddrugs();break;}case 2:{user_finddrugs();break;}case 3:{alldrugs();break;}case 4:{saledrugs();break;}case 5:{replenish();break;}case 6: {redycedrugs();break;}case 7:{main_menu();break;}default:printf("\n\t\t输入指令不会存在,请重新输入:");}} while(i<1||i>6);
} 

下面按照功能进行排列 一个黑框框一个函数

void adddrugs()     //增加药品
{system("color 0D");system("cls");medicine *p=medicine_head->next;while(1){medicine *q;q=(medicine *)malloc(sizeof(medicine));q->next=NULL;if(p==NULL){medicine_head->next=q;}while(p!=NULL){if(p->next==NULL){p->next=q;break;}p=p->next;}printf("\t\t---------------------------------------\n");printf("\n\t\t输入所添加的药品名称:");scanf("%s",q->name);printf("\n\t\t输入所添加药品编号:");scanf("%d",&q->num);printf("\n\t\t输入药品所添加到的药店编号:");scanf("%d",&q->drugstore_num);printf("\n\t\t输入所添加药品的价格:");scanf("%f",&q->price);printf("\n\t\t输入所添加药品数量:");scanf("%d",&q->stock);printf("\n\t\t输入目前添加药品销量:");scanf("%d",&q->sell);printf("\n\t\t输入所添加药品的功效:");scanf("%s",q->effect);printf("\n\t\t药品信息输入完成,将自动保存至文件\n");printf("\t\t---------------------------------------\n");FILE *fp;fp=fopen("medicine.txt","a+");if(NULL==fp){printf("\t\t此文件不存在\n");exit(1);} fprintf(fp," %s %d %d %.2f %d %d %s",q->name,q->num,q->drugstore_num,q->price,q->stock,q->sell,q->effect);fclose(fp);break;}printf("\n\t\t点击任意位置跳转至上一界面");system("pause");user_menu();
}
void user_finddrugs()     //经理端查找药品 (药品名查找)
{system("color 0E");system("cls");int flag=1;char a[10]; printf("\n\n\t\t输入所需查找药品的名称:\n\t\t");scanf("%s",a);system("cls");medicine *p=medicine_head->next;while(p!=NULL){if(strcmp(p->name,a)==0){flag=0;printf("--------------------------------------------------------\n");printf("\t药品名称:%s\n",p->name);printf("\t药品编号:%d\n",p->num);printf("\t药品价格:%.2f\n",p->price);printf("\t药店编号:%d\n",p->drugstore_num);printf("\t药品当前药店库存:%d\n",p->stock);printf("\t药品功效:%s\n",p->effect);printf("--------------------------------------------------------\n");}p=p->next;} if(flag)printf("查无此药\n");printf("点击返回菜单");system("pause");user_menu();
}
void alldrugs()          //所有药品信息
{system("color 0F");system("cls");medicine *p=medicine_head->next;while(p!=NULL){printf("\n*****************************************\n");printf("药品名称:%s\n",p->name);printf("药品编号:%d\n",p->num);printf("药店编号:%d\n",p->drugstore_num);printf("药品价格:%.2f\n",p->price);printf("库存数量:%d\n",p->stock);printf("药品销量:%d\n",p->sell);printf("药品功效:%s\n",p->effect);printf("\n*****************************************\n");p=p->next;}printf("\n所有药品显示完毕");system("pause");user_menu();}
void saledrugs()         //销售药品量
{system("color 0F");double a=0;system("cls");medicine *p=medicine_head->next;while(p!=NULL){if(p->sell>0){printf("\t\t------------------------------------\n");printf("\t\t药品名称:%s\n",p->name);printf("\t\t销量为:%d\n",p->sell);printf("\t\t所在店铺编号为:%d\n",p->drugstore_num);printf("\t\t销售价格合计:%.2f\n",p->sell*p->price);a+=(p->sell*p->price);printf("\t\t------------------------------------\n");}p=p->next;}printf("\t\t总计销售总价为%.2f\n",a);printf("\n\n\t\t销售如上所示\n\t\t");system("pause");user_menu();
}

上述为药品销量,没有排序的,可以试着自己搞下排序的。

void replenish()         //补货函数
{system("color 0A");system("cls");medicine *p=medicine_head->next;while(p!=NULL){if(p->stock<20){printf("\n\t\t-------------------------------------------------------------\n");printf("\t\t%d号药店%s库存少于20件,近期需进行补货\n",p->drugstore_num,p->name);printf("\n\t\t-------------------------------------------------------------\n");}p=p->next;}printf("需补货药品显示完毕\n");system("pause");user_menu();
}
void redycedrugs()      //收银
{system("color 0D");system("cls");int n,m;char a[10];medicine *p=medicine_head->next;printf("\t\t-----------------------------------------\n");printf("\n\n\t\t请输入购买的药品名称:");scanf("%s",a);printf("\n\t\t请输入购买所在药店编号:");scanf("%d",&n);printf("\n\t\t请输入购买数量:");scanf("%d",&m); while(p!=NULL){if(strcmp(p->name,a)==0&&p->drugstore_num==n){printf("\n\t\t应付价格为%.2f",p->price*m);p->sell+=m;p->stock-=m;break;}p=p->next;}printf("\n\t\t收银结束\n");printf("\t\t-----------------------------------------\n");system("pause");user_menu();
}

9.主函数

int main(){user_txt();place_txt();medicine_txt();main_menu();return 0;} 

10.头文件
中间说的头文件它终于来了!!!

#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<string.h>
#include<conio.h>
#include<windows.h>

最后想说一下,以前总觉得for循环很好用,但是在课设里面do while异常好用,每个循环都有优点,不同场合虽说可以相互代替,但是总有最适合的。(do while是真的适合在这里用!!!)

c语言课程设计-药店管理系统相关推荐

  1. 销售管理c语言程序设计,C语言课程设计销售管理系统

    C语言课程设计销售管理系统 C语言课程设计 题 目 商品销售系统 指导教师 曹东燕 学生姓名 刘伟 张新星 马国文 学 号 200900804072 200901802005 200900804051 ...

  2. 网吧管理系统C语言作业,C语言课程设计-网吧管理系统.doc

    C语言课程设计-网吧管理系统 <通信工程专业C语言课程设计> 报 告 专 业: 通信工程 班 级: 0802 姓 名: 赵 松 指导教师: 丁 雄 二00九 年 十二 月 二十五 日 目 ...

  3. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统

    <C语言课程设计-书店管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计-书店管理系统(25页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计计算机程序设计(C(C ...

  4. c语言课程设计人事管理,C语言课程设计-人事管理系统(65页).doc

    C语言课程设计-人事管理系统(65页) C语言课程设计 --人事管理系统 来自资料搜索网() 海量资料下载 人事管理管理系统 [要求] 某高校主要人员有:在职人员(行政人员.教师.一般员工).退休人员 ...

  5. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

  6. c语言课程设计图书管理系统

    数据结构c语言课程设计 图书管理系统 我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug.代码很多地方写的不是很好,请多多包涵. 账号1,密码1,为管理员账号:其他账号2,3,4 ...

  7. c语言课程设计作业图书管理系统,C语言课程设计图书馆管理系统程序代码.doc

    C语言课程设计图书馆管理系统程序代码.doc includestdio.h includewindows.h includestring.h includeconio.h define M 100 s ...

  8. c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf

    c语言课程设计 书店管理系统 计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24 日 一.选题背景: 设计一 ...

  9. c语言课程设计订单管理系统,C语言课程设计订单管理系统讲解.doc

    C语言课程设计订单管理系统讲解 C语言课程设计 随米打印订单管理系统 学 院: 计算机与信息科学学院 学生姓名: 谢润发 指导教师: 王新祥 职称 教授 专 业: 网络工程 班 级: 1501 完成时 ...

最新文章

  1. 怎么把项目推到gitlab上_Gitlab利用Webhook+jenkins实现自动构建与部署
  2. LeetCode-链表-24. 两两交换链表中的节点
  3. USTC English Club Note20171012(4)
  4. LINQ TO LISTT 合并列表
  5. spring基于XML的声明式事务控制-配置步骤
  6. python自然语言处理案例-Python自然语言处理 NLTK 库用法入门教程【经典】
  7. 初尝微信小程序2-基本框架
  8. Linux 压缩和解压命令
  9. JAVA的节点流和处理流
  10. 用element-ui的走马灯carousel轻松实现自适应全屏banner图 解决el-carousel默认高度300问题  组件代码
  11. 汲取 IE6、IE8 消亡的经验,如何“杀死” IE11?
  12. UVA156 Ananagrams【map+vector】
  13. 计算机图形学基础第七章ppt,第三章 计算机图形学基础ppt课件.ppt
  14. Android Hook技术详解
  15. android+otg+apk,android手机 OTG功能调试usb串口的demo程序
  16. 谷歌浏览器chrome devtools 插件安装
  17. 摸鱼宝典(一)——贪吃蛇游戏改版:贪吃龙 · 双龙戏珠小游戏(Python)
  18. php梯形评论,PHP梯形的上底.下底.高,点击计算面积按钮,输出梯形面积.
  19. 《网络末日战》精彩剧情生和每天都有小惊喜
  20. 变速自行车的变速、省力原理与窍门

热门文章

  1. ad敷铜后还有部分飞线_AD被喷Knight直播保护/EDG阿布:绝大部分玩家无法成为选手 网友:奈特你太好了...
  2. 卷积神经网络中的池化(Pooling)层
  3. 【ZYNQ】IP核_VDMA的详细介绍
  4. 密码学实验一、凯撒密码
  5. 为UE4整理中文字库,本文为如何将文本去重
  6. Navicat工具使用时闪退
  7. 2020年牛客算法入门课练习赛1
  8. 微信小程序中使用wx:for,循环中绑定点击事件,对数组进行渲染
  9. 如何在无网络的情况下给Dbeaver安装数据库驱动
  10. 深度学习炼丹-数据标准化