c语言实现药品管理系统

一、源码基于CodeBlocks开发环境

在这里插入图片描述

二、效果(展示一部分)

1、运行程序是这个界面

在这里插入图片描述

2、登录账号后

在这里插入图片描述

3、查看药品信息,总之可以对药品进行管理

在这里插入图片描述

三、源码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <time.h>

#define MEDICINE_FILE "medicine.txt" //药品文件名
#define USER_FILE "user.txt"         //管理员文件

typedef struct medicine
{
   
    char drug_name[100]; //药品名
    int drug_number;     //药品编号
    char drug_type[50];  //药品类型(中药,西药)
    int cost;            //成本
    int price;           //售价
    int num;             //药品剩余数量
    int remaining_days;  //距离过期剩余天数
    struct medicine *next;
} medicine;

medicine *head; //定义头指针

typedef struct user_f
{
   
    char name[50];   //账号
    char passwd[50]; //密码
} user_f;

typedef struct user
{
   
    user_f userarray[50];
    int size; //管理员个数
} user;

//与登录相关函数
void login_menu(user *userarr);     //登录菜单
void reg(user *userearr);           //注册账号
bool login(user *userarr);          //登录账号
void revise_passwd(user *userarr);  //修改密码
void get_passwd(user *userarr);     //找回密码
void save_user(user *userarr);      //保存账号到文件
void read_user_file(user *userarr); //从文件中读取管理员信息

//与药品操作相关函数
void showMenu();                      //打印菜单
void read_medicine_file();            //从文件中读入药品信息
void add_medicine();                  //添加药品信息
void show_medicine();                 //查看所有药品信息
void drug_number_del();               //按编号删除药品信息
void drug_name_del();                 //按姓名删除药品信息
void drug_number_revise();            //按编号修改药品信息
void drug_name_revise();              //按姓名修改药品信息
medicine *drug_number_find(int num);  //按编号查找药品信息,返回下标
void show_drug_number_find();         //输出查找到的药品信息
medicine *drug_name_find(char *name); //按姓名查找药品信息,返回下标
void show_drug_name_find();           //按姓名查找药品信息,并将药品信息输出
void drug_number_sort();              //按编号排序药品信息
void drug_name_sort();                //按姓名排序药品信息
void save_medicine();                 //保存药品信息到文件

int main(int argc, char *argv[])
{
   
    int select = 15;
    user userarr;
    head = (medicine *)malloc(sizeof(medicine));
    head->next = NULL;

    read_user_file(&userarr); //从文件读管理员信息

    login_menu(&userarr); //登录账号菜单

    read_medicine_file(); //读取文件中药品的信息

    while (1)
    {
   
        showMenu(); //打印菜单
        while (scanf("%d", &select) != 1 || select < 0 || select > 10)
        {
   
            printf("输入有误,请重新输入\n");
            scanf("%*[^\n]%*c"); //将输入缓冲中所有数据丢弃
        }

        switch (select)
        {
   
        case 0:
            //退出程序
            exit(0);
            break;
        case 1:
            //添加药品信息
            add_medicine();
            break;
        case 2:
            //查看所有药品信息
            show_medicine();
            break;
        case 3:
            //按编号删除药品信息
            drug_number_del();
            break;
        case 4:
            //按姓名删除药品信息
            drug_name_del();
            break;
        case 5:
            //按编号修改药品信息
            drug_number_revise();
            break;
        case 6:
            //按姓名修改药品信息
            drug_name_revise();
            break;
        case 7:
            //按编号查找药品信息,并将药品信息输出
            show_drug_number_find();
            break;
        case 8:
            //按姓名查找药品信息,并将药品信息输出
            show_drug_name_find();
            break;
        case 9:
            //按编号排序药品信息
            drug_number_sort();
            break;
        case 10:
            //按姓名排序药品信息
            drug_name_sort();
            break;
        }
    }

    return 0;
}

//登录菜单
void login_menu(user *userarr)
{
   
    while (1)
    {
   
        printf("欢迎使用药品管理系统!\n");
        printf("1.注册账号\n");
        printf("2.登录账号\n");
        printf("3.修改密码\n");
        printf("4.找回密码\n");
        printf("0.退出\n");

        int select = 3, flag = 0;

        while (scanf("%d", &select) != 1 || select < 0 || select > 4)
        {
   
            printf("输入有误,请重新输入!\n");
            scanf("%*[^\n]%*c");
        }
        switch (select)
        {
   
        case 0:
            //退出程序
            exit(0);
            break;
        case 1:
            //注册账号
            reg(userarr);
            break;
        case 2:
            //登录账号
            if (login(userarr))
            {
   
                printf("登录成功\n");
                flag = 1;
            }
            else
            {
   
                printf("登录失败,程序退出\n");
                exit(-1);
            }
            break;
        case 3:
            revise_passwd(userarr); //修改密码
            break;
        case 4:
            get_passwd(userarr); //找回密码
            break;
        }
        if (flag == 1)
        {
   
            break;
        }
    }
}

//注册账号
void reg(user *userarr)
{
   
    printf("请输入账号\n");
    scanf("%s", userarr->userarray[userarr->size].name);
    printf("请输入密码\n");
    scanf("%s", userarr->userarray[userarr->size].passwd);
    userarr->size++;
    printf("注册成功\n");

    save_user(userarr);
}

//登录账号
bool login(user *userarr)
{
   
    char name[50], passwd[50];
    int i, j;

    printf("\033[35m你有5次登录机会!\033[0m\n");
    for (j = 0; j < 5; ++j)
    {
   
        printf("\033[35m第%d次登录\033[0m\n", j + 1);
        printf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先睡个好觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值