这个东东第一次才开始写的时候,脑子都是懵的,把我的方法和解决办法写出来,希望可以对你有一点帮助。
逻辑方面
可以先想想,我需要这个系统实现什么功能,就药店管理系统来讲,这个我觉得增删改查是必须的,再加一个补货提醒,剩下的就是什么几家药店一起搞,这样用户知道库存和药店位置可以做出最优选择。然后搞了两个端口进行,一个用户端,一个工作人员端口,这样的话显示菜单不同,功能也可以分开实现。(这里可以写三个文本,一个存药店信息,一个存药品信息,一个存所有的用户和工作人员的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;
else
q->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-