博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
药品管理系统C语言实现 BME讲座记录
阅读量:3961 次
发布时间:2019-05-24

本文共 11143 字,大约阅读时间需要 37 分钟。

#include
#include
#include
#include
#include
struct user{
char useword[100]; char password[100];};typedef struct medicine{
char num[5];//品编号 char name[20];//品名 char otc;是否为OTC,是为T否为N int lye;保质期:2020年 int lmo;//1月 int lda;//1日 int number;//剩余量}doc;char nu[5];char nam[20];char ot;int ly;int lm;int ld;int num;typedef struct lnode{
doc data; struct lnode *next;}linklist;void surface(){
printf(" *********************************************************\n"); printf(" * *\n"); printf(" * 欢迎使用药品管理系统 *\n"); printf(" * *\n"); printf(" * 生物医学工程创新实践团队讲座用 *\n"); printf(" * *\n"); printf(" * 按任意键进入 *\n"); printf(" * *\n"); printf(" *********************************************************\n");}void menu(){
printf(" *********************************************************\n"); 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(" * 8:将信息保存至文件 *\n"); printf(" * 0:退出系统 *\n"); printf(" * *\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.lye, &temp.data.lmo, &temp.data.lda, &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;}int password()//密码{
int n=5,i; struct user use; struct user constrast; struct user write; FILE* fp = fopen("user.txt", "a"); FILE* fu = fopen("user.txt", "r"); while (1) {
system("cls"); printf(" *********************************************************\n"); printf(" * *\n"); printf(" * 1:登录用户 *\n"); printf(" * 2:注册用户 *\n"); printf(" * *\n"); printf(" *********************************************************\n"); scanf("%d", &i); system("cls"); if (i == 1) {
if ((fscanf(fu, "%s\t%s\n", constrast.useword, constrast.password) != EOF)) {
while (1) {
printf("剩余次数:%d 次\n", n--); printf("请输入用户名:"); scanf("%s", write.useword); printf("\n"); printf("请输入密码:"); scanf("%s", write.password); if ((strcmp(write.useword, constrast.useword) == 0) && (strcmp(write.password, constrast.password)) == 0) return 1; else {
system("cls"); printf("请再尝试一次:\n"); } if (n == 0) {
printf("抱歉,登陆失败\n"); return 0; } } } else {
printf("请先注册!\n"); n++; break; } } else if (i == 2) {
printf("请输入用户名:"); scanf("%s", use.useword); printf("\n"); printf("请输入密码:"); scanf("%s", use.password); fprintf(fp, "%s\t%s\n", use.useword,use.password); fclose(fp); system("cls"); printf("注册成功!\n"); } else printf("请输入正确的选项\n"); }}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", &ly); printf("月份:"); scanf("%d", &lm); printf("日期:"); scanf("%d", &ld); p->data.lye = ly; p->data.lmo = lm; p->data.lda = ld; printf("剩余量:"); scanf("%d", &num); p->data.number = num; p->next = q->next; q->next = p; /* FILE* med = fopen("medicine.txt", "a"); fprintf(med, "药品序号:%s 名称:%s OTC:%c 生产日期:%d年%d月%d日 剩余量:%d\n", p->data.num, p->data.name, p->data.otc, p->data.lye, p->data.lmo, p->data.lda, p->data.number); fclose(med);*/ }}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 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", &ly); printf("月份:"); scanf("%d", &lm); printf("日期:"); scanf("%d", &ld); p->data.lye = ly; p->data.lmo = lm; p->data.lda = ld; printf("剩余量:"); scanf("%d", &num); p->data.number = num; printf("修改成功!"); getchar(); getchar(); break; } q = q->next; } if (q->next == NULL) {
printf("没有当前药品信息!"); getchar(); getchar(); }}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年%d月%d日\n", p->data.lye,p->data.lmo,p->data.lda); printf("剩余量:%d\n", p->data.number); getchar(); getchar(); break; } q = q->next; } if (q->next == NULL) {
printf("没有当前药品信息!"); 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.number > p->data.number){
/*先复制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", c->data.num, c->data.name, c->data.otc, c->data.lye, c->data.lmo, c->data.lda, c->data.number); c = c->next; } 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 medicinesum(linklist* L)//统计总药品剩余量{
long int sum=0; linklist* p = L->next; if (p == NULL) {
printf("当前没有任何药品信息!"); getchar(); getchar(); return; } while (p != NULL) {
sum += p->data.number; p = p->next; } printf("总药品剩余量为:%ld",sum); 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\n", p->data.num, p->data.name, p->data.otc, p->data.lye, p->data.lmo, p->data.lda, p->data.number); p = p->next; } fclose(med); printf("保存成功!"); getchar(); getchar();}int main(void){
int i, n, flag=1; system("cls");//清屏 surface(); getchar(); system("cls"); i=password(); if (i == 0) return 0; 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: deletemedicine(L); break; case 3: changemedicine(L); break; case 4: findmedicine(L); break; case 5: ranknumber(L); break; case 6: finddelayed(L); break; case 7: medicinesum(L); break; case 8: document(L); break; default: printf("请输入正确的选项\n"); break; } }}

转载地址:http://qtrzi.baihongyu.com/

你可能感兴趣的文章
Ruby on Rails(ROR) 实例开发之一 scaffold创建框架
查看>>
转: 我的android studio学习日记
查看>>
Android_Note(三)——添加、更新、保存记事本功能
查看>>
Ruby 的 Test::Unit
查看>>
创建数据方法
查看>>
JUnit单元测试的几个规律总结
查看>>
QTP之网页链接
查看>>
Fiddler实用教程
查看>>
从入门到深入Fiddler (一)
查看>>
从入门到深入Fiddler (二)
查看>>
Win7+php7+apache2.4
查看>>
QTP基本使用——associate actions
查看>>
charAt()方法和charCodeAt()方法—— 从字符串中选取一个字符.
查看>>
(1)Pascal 程序结构和基本语句
查看>>
LoadRunner之——脚本分析
查看>>
Advanced searching - fields reference
查看>>
Advanced searching - operators reference
查看>>
LoadRunner之——Java vuser
查看>>
LoadRunner之——场景创建、设置、运行
查看>>
QTP基本使用——Recovery Scenarios
查看>>