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语言药房管理系统 的相关文章

  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 运行“source .vimrc”时出错

    当我在 ubuntu 中运行 source vimrc 时 我有一个简单的 vimrc 文件 但出现以下错误 source vimrc bash vimrc line 3 syntax error near unexpected token
  • 如何从 VIM 运行 C 程序?

    有没有一种方法可以从 VIM 编译并运行 C 程序而无需输入文件名 gcc o somename somename使用时 将替换为当前打开的文件的名称 当你的项目变得更大时 你还可以编写一个makefile并编译当前项目 make 如果有任
  • Macvim 默认不会加载特定的配色方案

    我遇到了类似的问题VIM 配色方案默认不加载 https stackoverflow com questions 2637929 vim color scheme not loading by default 除了我遇到了这里找到的 gen
  • 查找每第三个值并在 VIM 中插入 cr 或换行符

    因此 我有几个大型数据集 需要使其更具可读性 目前我必须进入并移动到每个第三个值并插入换行符 我已经在 VIM 中尝试了几种方法来使其正常工作 但似乎没有一个能返回我正在寻找的值 这是我的一些数据 0 96260310749184663 4
  • vim 定界伴侣

    使用 DelimitMate 它会自动生成右括号 当我在括号内输入完毕后 按什么键可以快速转到右括号的右侧 现在我必须手动按 ESC 然后按 a 这些自动关闭插件 就像 Eclipse 等 IDE 中的原始功能实现一样 的想法是 您只需ty
  • 如何在 Vim 中设置自动插入新行和缩进,当使用自动关闭成对时

    我发现了一个 Vim 自动配对插件 名为vim 自动关闭 https github com Townk vim autoclose 它与其他 IDE 一样运行良好 例如 当您输入 它给你 代表光标 然后 如果按 Enter 键 变成 这正是
  • Vim:如何滚动绑定光标线?

    Vim 的分割窗口视图中的两个窗口可以相互绑定滚动通过设置 set scrollbind对于他们俩来说 完成此操作后 如果我在一个窗口中向下滚动光标 其他窗口也会随之向下滚动 但是 两个窗口中的光标并未相互绑定 我用过 set cursor
  • Vim 和 Ctags:生成标签时忽略某些文件

    我有一个文件夹 llvm2 9 我在其中运行了此命令 gt ctags R sort 1 c kinds p fields iaS extra q language force C 这是 html 文件中的索引方法 也存在于 llvm2 9
  • 在 VIM 中切换语法高亮的隐藏属性

    我目前有一个解析日志文件的语法文件 与以下内容非常相似 这是针对 syslog 的 syn match syslogText syn match syslogFacility 1 nextgroup syslogText skipwhite
  • 如何让 git 在 vi​​m 中显示更改,就像 hg 使用 hgeditor 脚本那样?

    Mercurial 的一个有趣的功能是能够查看将在 vim split 中提交的更改 请参阅VIM 中的 DiffsInCommitMessage https www mercurial scm org wiki DiffsInCommit
  • 通过 Homebrew 安装 Vim,并支持 Python 和 Python3

    我想在 Vim 中启用 Python 自动完成功能 所以也许这不是问题 这是我观察到的 First 虚拟环境 https github com kennethreitz python guide blob master docs dev v
  • Vim - 删除多行中的直到(包括)字符

    我有这个代码 def foo c Char c match case a B 我的光标位于后面的空格上 我想删除所有内容 直到 包括 我怎样才能做到这一点 我可以在光标位于第一行任意位置时执行相同操作吗 块中的任何位置 并将光标放在 d e
  • 在插入模式下移至行首

    我知道我可以使用 Home in insert mode Esc i to exit insert mode and enter it again effectively going to the beginning of line But
  • 有没有一个 vim 命令可以重新定位选项卡?

    如何更改当前选项卡的位置 顺序Vim 例如 如果我想将当前选项卡重新定位为第一个选项卡 您可以使用以下命令重新定位选项卡 tabm使用相对或零索引绝对参数 绝对 将选项卡移至位置 i tabm i 相对的 将选项卡 i 位置向右移动 tab
  • vim:视觉明星搜索未按预期工作

    我复制了这个函数来进行视觉搜索 and function s VSetSearch cmdtype let temp s norm gv sy let V substitute escape s a cmdtype n n g let s
  • 如何取消 Vim 中的粘贴操作?

    每当我不小心在 Putty 中右键单击 打开 Vim 时 我的剪贴板上就有相当多的文本 并且 Vim 启动了粘贴操作 该操作已经持续了大约十分钟 我不想丢失未保存的工作 有没有办法指示 Vim 停止粘贴文本 If you re in nor
  • VIM:有没有一种简单的方法可以从 Vim 管理 Visual Studio 解决方案/makefile 项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我尝试使用 Visual Studio 而不是 VIM 插件 但说实话 VS 相对于 VIM 的唯一优势是它能够自动管理我的项目 我知道 VS
  • 如何更改每种语言的 vim 设置?

    我将 vim 与许多不同的语言 C C Java shell 等 一起使用 我知道 vim 已经为每种语言预设了设置 但我想根据我个人的喜好更改每种语言的设置 我已经有一个带有设置的 vimrc 文件 但我想要更多文件来根据我使用的语言声明
  • 在Vim中,如何删除单词的后缀?

    在vim中 在正常模式下 如果光标位于单词中 而不是最后一个字母 de从光标位置删除单词的后缀 如果光标位于最后一个字母上 x也这样做 同时de会跳到下一个单词的末尾 您将使用什么命令在这两种情况下都有效 无论最后一个字母与否 目的是将命令

随机推荐

  • 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