c语言药房管理系统

2023-11-19

#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;
        }
    }
}
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言药房管理系统 的相关文章

  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • 为什么“script”命令会生成 ^[ 和 ^M 字符以及如何使用 vim 搜索和替换删除它们?

    在linux上 使用bash shell 当我使用script命令时 生成的文件称为typescript 当我用 vim 打开该文件时 每一行都包含 M字符 并且有几行 由于我的彩色命令提示符 包含一个字符 我想用任何东西替换这些字符 从而
  • 我可以在 VIM 或 Perl 中替换单个正则表达式中的多个项目吗?

    假设我有字符串 The Quick Brown Fox Jumps Over the Lazy Dog 我可以用一个正则表达式将其更改为 The Slow Brown Fox Jumps Over the Energy Dog 吗 目前 我
  • 如何在 vim 中为 cscope 输出添加颜色?

    我使用的是 vim 7 4 vim 中的 cscope 输出全是白色 可以变得更加丰富多彩吗 我尝试了cecscope 它使用quickfix给vim带来颜色 但它的输出不适合小屏幕 使用笔记本电脑时它没有那么有用 那么还有其他方法可以为
  • 在 vim 中设置文本宽度而不覆盖特定于文件类型的内容

    我希望 vim 中默认的文本宽度为 80 但如果特定文件类型有自己的文本宽度 特别是 gitcommit 其中 tw 72 我希望 vim 尊重该宽度 在我的 vimrc 中 我有以下行 set tw 80 我也尝试过 setlocal t
  • gVim 和 gVim easy 有什么区别?

    这个问题是不言自明的 但经过一个小时的搜索 我还没有找到任何资源可以解释其中的差异 在对两者进行了一些研究后 发现 gVim 和 gVim easy 是相同的 gVim Easy 启动并锁定在插入模式 您输入的每个字符都像简单的记事本一样打
  • Vi/vim - 从末尾行删除,包括最后一个字符

    我想做类似这个问题的事情VI VIM 删除 更改从右到左 https stackoverflow com q 9154212 301527即从行尾删除到该行中 的最后一个实例 这可以使用dT 将光标放置在该行的末尾 然而 这个命令和其他这样
  • 如何在 Vim 中使 shift+空格键向上翻页?

    我的 vimrc 中有一个条目 当我按空格键时 它会在视口中向下翻页 它看起来像这样 map
  • VIM 分块插入

    我想在 VIM 中选定的文本块的开头插入一个哈希 Ruby 注释 我在可视模式下选择了线条 但如何对所有线条执行相同的操作 您有两个主要选择 在块视觉模式中选择 ctrl v 然后使用I沿着整个块的左侧插入相同的东西 相似地A追加 看分块运
  • 在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是什么?

    在VIM中 当我需要注释掉一段Ruby代码时 我导航到要注释掉的行中的第一列 我按 CTRL v 进入视觉块模式 我向下导航直到我想要结束操作的地方 I type r
  • 如何在 Vim 中创建带有控件和功能键的映射?

    我想要一个映射来快速退出所有缓冲区 以便在我对大量文件进行 vimdiff 时使用 事实证明 Control 和功能键在一起具有很好的安全性 这样我就不会不小心按下这个组合 无意中离开 Vim 我尝试了以下映射 map
  • 在 Vim 的 `autocmd` 命令中调用函数

    我想使用expand函数在一个autocmd 特别是 我正在改编tip https stackoverflow com questions 1240037 recommended build system for latex 1394702
  • 如何成功使用 VIM 作为 Code::Blocks 的外部编辑器?

    我真的很喜欢 Code Blocks 的构建系统和单步调试能力 也就是说 我真的很喜欢使用 gcc gdb 的包装器 而不是从 Makefile 或命令行使用它们 问题是 多年来使用 VIM 使我的大脑受到了严重损伤 或者有些人可能会说被宠
  • vim 按语法高亮类型搜索

    我正在将 i18n 添加到现有项目 Web 应用程序 这涉及到用对 i18n 库的调用来替换静态文本的每一位 如果能够搜索该文本 而不是依靠语法突出显示来直观地识别它 将会很方便 在 vim 中 是否可以在文件中搜索特定突出显示类型的出现
  • 如何从 vim 命令行交互运行 vim 脚本?

    有没有办法从以下位置运行这些脚本 命令行只需敲几下键 在过去的几个月里 我构建了一系列充满 vim 命令的文件 为我的项目自动生成样板代码 它让我工作得更快 但是 我知道如何运行这些脚本的唯一方法是将它们分配给 vimrc 我只能重新映射这
  • Vim:使用制表符缩进,使用空格对齐

    我已经阅读了几个问题和答案 Vim 使用制表符缩进 使用空格与 C 源文件对齐 https stackoverflow com questions 8493705 vim use tabs for indentation spaces fo
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • 自定义 Vim HTML 语法

    我有一个脚本可以读取 HTML 文件并替换出现的 foo 具有 Perl 设置的值 像这样的东西 span class hi mom span 会在浏览器中产生类似这样的内容 span class classyclass Hello Wor
  • Vim - 在插入模式下删除行

    我可以在插入模式下删除一行吗 因为目前我必须按
  • Vim 自动缩进换行

    我如何让vim将光标放在大括号内以新行开始 即用 表示光标位置 class 现在我的设置只能做到这一点 class 我在 vimrc 文件中得到了这个 设置自动缩进 shiftwidth 2 tabstop 2 noexpandtab 基本

随机推荐

  • Bootstrap导航

    Bootstrap 导航 1 定义导航组件 基本结构 ul class nav li class active a href 首页 a li li a href 导航标题1 a li li a href 导航标题2 a li ul 1 1
  • Code39码和Code93码的区别

    条形码可以标示出产品的生产国 制造厂家 图书分类号 邮件起止地点 类别 日期等许多信息 因而在很多领域都得到了广泛的应用 尤其是那些可以同时支持字母 数字 字符这些字符集的条码 比如Code39和Code93 都是可以支持多种字符集的条形码
  • ios游戏开发

    知识系统 英文教程网站 http www csdn net article 2012 12 20 2813035 game dev guide 开发类库 http www csdn net article 2012 11 07 281158
  • Jmeter动态吞吐量实现

    在容量测试时 控量 是非常重要的 JMeter 是根据线程数大小来控制压力强弱的 但我们制定的压测目标中的指标往往是吞吐量 QPS TPS 这就给测试人员带来了不便之处 必须一边调整线程数 一边观察 QPS TPS 达到什么量级了 为了解决
  • 本地视频播放器

    这是一个基于VUE Go做的一个本地视频播放器项目 欢迎fork或star 使用指南 本地开发 安装依赖 npm install 开发模式 npm run dev 打包 npm run build 启动后端 bee run 直接使用 解压
  • “条件递进式编程”技巧两例

    什么是 条件递进式编程 呵呵 这是我自己起的名字 所谓条件递进式编程 就是指需要一系列相关函数组合执行的情况下 后续函数执行的必要性由前面所有函数执行是否成功来决定 比如说 有一系列函数如下DoSomething1 DoSomething2
  • 端到端的图像压缩------《End-to-end optimized image compression》笔记

    End to end optimized image compression 简介 内容 整体算法结构以及流程如下 前向传播 变换优化问题 变分推导问题 实验结果 结论 论文地址 https arxiv org abs 1611 01704
  • 获取map中第一个key值

    获取map中第一个key值 param map 数据源 return public static String getKeyOrNull Map
  • SqliLabs Less26-26a

    第二十六关 GET类型基于你所有的空格和言论都是属于我的错误 1 判断注入点 根据提示 sql语句应该存在过滤 观察源代码发现存在or and 空格 斜杠过滤 绕过方法 Or and 采取双写绕过 注释过滤 采取and 1闭合语句绕过 空格
  • 获取url内的参数数据

    例如我们的页面 是含有参数的 类似于 www baidu com userdata 百度用户 我们想获得 url内的userdata的数据值 那么就需要 使用下方这个正则判断方式来进行计算 window location href 这个可以
  • SSM 基础面试题

    什么是 MyBatis 参考答案 1 MyBatis 是一个半自动 ORM 对象关系映射 框架 它内部封装了 JDBC 开发时只需要关注 SQL 语句本身 不需要花费精力去处理加载驱动 创建连接 创建 statement 等繁杂的过程 程序
  • VMware 中的 Ubuntu 虚拟机看不到共享文件夹怎么办?

    初学Linux 在VMWare 上装了Ubuntu14 04 主机端和虚拟机相互间的访问是必不可少的 途径有许多 其中vmware tool提供的共享文件夹方式简单又方便 然而 有时却莫名其妙的 在Ubuntu上看不到共享文件夹了 网上查了
  • 【vue3+elementplus】动态设置二次封装的el-form组件中的v-model绑定的变量名

    众所周知 在form表单中 el select el input等需要使用v model绑定变量 这个变量就是当前选择 输入的内容 一般会取ruleForm作为入参
  • java对象赋值给另一个对象_java注解实现对象的属性赋值,从此少写代码,快乐生活...

    各位志同道合的朋友们大家好 我是一个一直在一线互联网踩坑十余年的编码爱好者 现在将我们的各种经验以及架构实战分享出来 如果大家喜欢 就关注我 一起将技术学深学透 我会每一篇分享结束都会预告下一专题 我们平时在做一些业务时 从前台获取的数据用
  • 自定义模块导入错误

    当在python2 7 导入自定义模块 发生Importerror No module named xxx时 可将模块所在路径拷贝到E xxx python2 7 Lib site packages下 再进行导入则可解决问题 经过多方的摸索
  • MobaXterm出现X11-forwarding : ✘ (disabled or not supported by server)及conda: command not found等问题

    x11 forwarding disabled解决办法 3L csdn的博客 CSDN博客 如何安装X11 xorg https www cnblogs com yun qi p 16201843 html如何解决在Ubuntu中使用x11
  • 机器学习之线性回归——OLS,岭回归,Lasso回归

    机器学习之线性回归 线性回归 最小二乘法 OLS 岭回归 Ridge Regression Lasso回归 OLS 岭回归 Lasso回归之间对比 线性回归 什么是线性回归呢 其实线性回归是统计学中的 线性回归 Linear Regress
  • java 中的指针_Java中的指针

    java 中的指针 Java中有指针吗 简短的答案是 不 没有 这对于许多开发人员来说似乎是显而易见的 但是 为什么对其他人却不那么明显呢 http stackoverflow com questions 1750106 how can i
  • STM32实现HID键盘

    上面是我的微信和QQ群 欢迎新朋友的加入 这个帖子不是技术贴 是成品分享贴 电路设计 实物图 软件设计 功能说明 1 固件通过虚拟U盘升级 2 自定义按键功能 全键盘 3 七彩灯颜色设置 4 多媒体按键功能 5 支持按键双击和单击操作 6
  • c语言药房管理系统

    include