c语言药房管理系统

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
typedef struct medicine
{
    char num[5];//药品编号
    char name[20];//药品名称
    char otc;//是否为OTC,是为T否为N
    char product;//生产日期
    int lye;//保质期:2020年
    int lmo;//1月
    int lda;//1日
    int sell;//销售量
    int number;//库存量
}doc;

char nu[5];
char nam[20];
char ot;
char pro;
int ly;
int lm;
int ld;
int sel;
int num;

typedef struct lnode
{
    doc data;
    struct lnode *next;
}linklist;
void menu()
{
    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("                      *                  0:狠心退出系统                 *\n");
    printf("                      *                  *********************           *\n");
}

linklist* loadfile()
{
    linklist* q, * k, * head = (linklist*)malloc(sizeof(linklist));
    linklist temp;
    FILE* r = fopen("medicine.txt", "r");
    k = q = head;
    head->next = NULL;
    if (r == NULL){
        r = fopen("medicine.txt", "w");
        if (r == NULL){
            printf("打开文件出错!\n");
            return NULL;
        }
        fclose(r);
        return head;
    }
    while (fscanf(r, "%s\t%s\t%c\t%d\t%d\t%d\t%d\n", temp.data.num, temp.data.name, &temp.data.otc, &temp.data.product,&temp.data.lye, &temp.data.lmo, &temp.data.lda, &temp.data.sell, &temp.data.number) != EOF){
        temp.next = NULL;
        q = (linklist*)malloc(sizeof(linklist));
        *q = temp;
        k->next = q;
        k = q;
    }
    k->next = NULL;
    fclose(r);
    return head;
}
void addmedicine(linklist *L)//新增药品条目
{
    printf("请输入药品信息:\n");
    printf("药品编号:");
    scanf("%s", nu);
    linklist* q = L;
    while (q->next != NULL){
        if (strcmp(q->next->data.num, nu) == 0){
            printf("此药品已存在\n");
            getchar(); getchar();
            break;
        }
        q = q->next;
    }
    if (q->next == NULL){
        linklist* p;
        p = (linklist*)malloc(sizeof(linklist));
        strcpy(p->data.num, nu);
        printf("药品名称:");
        scanf("%s", nam);
        strcpy(p->data.name, nam);
        printf("是否为OTC,是为T否为N:");
        getchar();
        scanf("%c", &ot);
        p->data.otc = ot;
        printf("生产日期: \n");
        scanf("%d",&pro);
        p->data.product = pro;
        printf("保质期\n年份:");
        scanf("%d", &ly);
        printf("月份:");
        scanf("%d", &lm);
        printf("日期:");
        scanf("%d", &ld);
        p->data.lye = ly;
        p->data.lmo = lm;
        p->data.lda = ld;
        printf("销售量:");
        scanf("%d", &sel);
        p->data.sell = sel;
        printf("库存量: ");
        scanf("%d",&num);
        p->data.number = num;
        p->next = q->next;
        q->next = p;
        /*FILE* med = fopen("medicine.txt", "w");
        fprintf(med, "药品序号:%s 名称:%s OTC:%c 生产日期:%d 保质期:%d年%d月%d日 销售量:%d\n 库存量:%d\n", p->data.num, p->data.name, p->data.otc, p->data.product, p->data.lye, p->data.lmo, p->data.lda, p->data.sell, p->data.number);
        fclose(med);*/
    }
}
void findmedicine(linklist *L)//查询药品条目
{
    printf("请输入药品信息:\n");
    printf("药品编号:");
    scanf("%s", nu);
    linklist* q = L, * p;
    while (q->next != NULL) {
        if (strcmp(q->next->data.num, nu) == 0) {
            p = q->next;
            printf("药品名称:%s\n",p->data.name);
            printf("是否为OTC:%c\n", p->data.otc);
            printf("生产日期:%d\n",p->data.product);
            printf("保质期:%d年%d月%d日\n", p->data.lye,p->data.lmo,p->data.lda);
            printf("销售量:%d\n", p->data.sell);
            printf("库存量:%d\n", p->data.number);
            getchar(); getchar();
            break;
        }
        q = q->next;
    }
    if (q->next == NULL) {
        printf("没有当前药品信息!");
        getchar(); getchar();
    }
}
void changemedicine(linklist *L)//修改药品条目
{
    printf("请输入药品信息:\n");
    printf("药品编号:");
    scanf("%s", nu);
    linklist *q = L,*p;
 while (q->next != NULL) {
    if (strcmp(q->next->data.num, nu) == 0) {
        p = q->next;
        printf("已查到药品信息\n");
        printf("请输入新药品信息:\n");
        printf("药品名:");
        scanf("%s", nam);
         strcpy(p->data.name, nam);
        printf("是否为OTC,是为T否为N:");
        getchar();
        scanf("%c", &ot);
        p->data.otc = ot;
        printf("生产日期: \n");
        scanf("%d",&pro);
        p->data.product = pro;
        printf("保质期\n年份:");
        scanf("%d", &ly);
        printf("月份:");
        scanf("%d", &lm);
        printf("日期:");
        scanf("%d", &ld);
        p->data.lye = ly;
        p->data.lmo = lm;
        p->data.lda = ld;
        printf("销售量:");
        scanf("%d", &sel);
        p->data.sell = sel;
        printf("库存量: ");
        scanf("%d",&num);
        p->data.number = num;
        printf("修改成功!");
        getchar(); getchar();
        break;
        }
        q = q->next;
    }
    if (q->next == NULL) {
        printf("没有当前药品信息!");
        getchar(); getchar();
    }
}
void deletemedicine(linklist *L)//删除药品条目
{
    printf("请输入药品信息:\n");
    printf("药品编号:");
    scanf("%s", nu);
    linklist *q = L,*p;
    while (q->next != NULL) {
        if (strcmp(q->next->data.num, nu) == 0) {
            p = q->next;
            q->next = p->next;
            free(p);
            printf("删除成功!");
            getchar(); getchar();
            break;
        }
        q = q->next;
    }
    if (q->next == NULL) {
        printf("没有当前药品信息!");
        getchar(); getchar();
    }
}
void finddelayed(linklist* L)//显示过期药品
{
    int flag = 1;
    int year, month, day;
    time_t timep;
    struct tm* p;
    time(&timep);
    p = gmtime(&timep);
    day = p->tm_mday;/*获取当前月份日数,范围是1-31*/
    month = 1 + p->tm_mon;/*获取当前月份,范围是0-11,所以要加1*/
    year = 1900 + p->tm_year;/*获取当前年份,从1900开始,所以要加1900*/
    linklist* q = L->next;
    if (q == NULL) {
        printf("当前没有任何药品信息!");
        getchar(); getchar();
        return;
    }
    while (q != NULL) {
        if (q->data.lye < year) {
            printf("%s已过期\n", q->data.name);
            flag = 0;
        }
        else if (q->data.lye == year && q->data.lmo < month) {
            printf("%s已过期\n", q->data.name);
            flag = 0;
        }    
        else if (q->data.lye == year && q->data.lmo == month && q->data.lda < day) {
            printf("%s已过期\n", q->data.name);
            flag = 0;
        }    
        q = q->next;
    }
    if(flag)
        printf("当前没有过期药品\n");
    getchar(); getchar();
}
void ranknumber(linklist* L)//生成销售统计
{
    long int sum = 0;
    linklist* r = L->next,*q,*p;
    if (r == NULL) {
        printf("当前没有任何药品信息!");
        getchar(); getchar();
        return;
    }
    while (r != NULL) {
        p = r;
        q = r->next;
        linklist* tmp;//用于排序时暂存节点  
        tmp = (linklist*)malloc(sizeof(linklist));
        while (q != NULL){
            if (q->data.sell > p->data.sell){
                /*先复制q结点信息到tmp*/
                strcpy(tmp->data.num, q->data.num);
                strcpy(tmp->data.name, q->data.name);
                tmp->data.otc = q->data.otc;
                tmp->data.lye = q->data.lye;
                tmp->data.lmo = q->data.lmo;
                tmp->data.lda = q->data.lda;
                tmp->data.number = q->data.number;
                /*再复制p结点信息到q*/
                strcpy(q->data.num, p->data.num);
                strcpy(q->data.name, p->data.name);
                q->data.otc = p->data.otc;
                q->data.lye = p->data.lye;
                q->data.lmo = p->data.lmo;
                q->data.lda = p->data.lda;
                q->data.number = p->data.number;
                /*最后复制exchange结点信息到p*/
                strcpy(p->data.num, tmp->data.num);
                strcpy(p->data.name, tmp->data.name);
                p->data.otc = tmp->data.otc;
                p->data.lye = tmp->data.lye;
                p->data.lmo = tmp->data.lmo;
                p->data.lda = tmp->data.lda;
                p->data.number = tmp->data.number;
            }
            q = q->next;
        }
        r = r->next;
    }
    printf("排序后的药品信息为:\n");
    linklist* c=L->next;
    while (c != NULL) {
        FILE* med = fopen("medicine.txt", "a");
        printf("%s\t%s\t%c\t%d\t%d\t%d\t%d\n%d\n%d\n", c->data.num, c->data.name, c->data.otc, c->data.product, c->data.lye, c->data.lmo, c->data.lda, c->data.sell, c->data.number);
        c = c->next;
    }
    getchar(); getchar();
}
void document(linklist* L)//保存药品信息
{
    linklist* p = L->next;
    if (p == NULL) {
        printf("当前没有任何药品信息!");
        getchar(); getchar();
        return;
    }
    FILE* med = fopen("medicine.txt", "w");
    while (p!=NULL) {
        fprintf(med, "%s\t%s\t%c\t%d\t%d\t%d\t%d\t%d\n%d\t", p->data.num, p->data.name, p->data.otc, p->data.product, p->data.lye, p->data.lmo, p->data.lda, p->data.sell, p->data.number);
        p = p->next;
    }
    fclose(med);
    printf("保存成功!");
    getchar(); getchar();
}

int main(void)
{
    int n, flag=1;
    system("cls");//清屏
    getchar();
    system("cls");
    linklist* L;
    L = loadfile();
    while(1)
    {
        system("cls");
        menu();
            scanf("%d", &n);
        switch (n)
        {
            case 0:
                printf("谢谢使用");
                return 0;
            case 1:
                addmedicine(L);
                break;
            case 2:
                findmedicine(L);
                break;
            case 3:
                changemedicine(L);
                break;
            case 4:
                deletemedicine(L);    
                break;
            case 5:
                finddelayed(L);
                break;
            case 6:
                ranknumber(L);
                break;
            case 7:
                document(L);
                break;
            default:
                printf("请输入正确的选项\n");
                break;
        }
    }
}
 

  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nycSerendipity

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

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

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

打赏作者

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

抵扣说明:

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

余额充值