西安邮电大学 C语言实习 医院管理系统

printf(\单价:\ scanf(\ printf(\%s %s %s\\n\ save1(h); return 1; } } m=m->next; } save2_bianji(h); return 0; }

//排序部分函数的定义 void paixu1() { struct patient *h,*p; system(\ h=read1(); p=charu(h); print1(p); }

struct patient *charu(struct patient *head) { struct patient *first; /*为原链表剩下用于直接插入排序的节点头指针*/ struct patient *t; /*临时指针变量:插入节点*/ struct patient *p; /*临时指针变量*/ struct patient *q; /*临时指针变量*/ first = head->next; /*原链表剩下用于直接插入排序的节点链表:可根据图12来理解。*/ head->next = NULL; /*只含有一个节点的链表的有序链表:可根据图11来理解。*/ while (first != NULL) /*遍历剩下无序的链表*/ { /*注意:这里for语句就是体现直接插入排序思想的地方*/ for (t=first, q=head; ((q!=NULL) && (q->id1id1)); p=q, q=q->next); /*无序节点在有序链表中找插入的位置*/ /*退出for循环,就是找到了插入的位置*/ /*注意:按道理来说,这句话可以放到下面注释了的那个位置也应该对的,但是就是不能。原因:你若理解了上面的第3条,就知道了。*/ first = first->next; /*无序链表中的节点离开,以便它插入到有序链表中。*/

if (q == head) /*插在第一个节点之前*/ { head = t; } else /*p是q的前驱*/ { p->next = t; } t->next = q; /*完成插入动作*/ /*first = first->next;*/ } return head; }

//统计函数的定义

void total(struct patient *h) { struct patient *p; int male=0; int female=0; int total=0; h=read1(); for(p=h->next;p!=NULL;p=p->next) { total++; if(strcmp(p->sex1,\ { female++; } else male++; } printf(\统计结果如下:\\n\ printf(\病人总数:%d\\n\ printf(\男人:%d\\n\ printf(\女人:%d\\n\ printf(\按任意键返回主菜单\ getch(); Display(); }

//登陆部分函数的定义 void UserReg() { int i; FILE *fp,*fp1;//创建文件指针 char Userdata[50]={0},Userdata1[30]={0};//用来存储从data.txt中读取的用户

信息 char Linedata[50]={0},User[20],Pass[20],Linedata1[30]={0};//三个分别是:一行数据,用户名,密码 fp=fopen(\打开d:/ywp/mima.txt追加写数据 fp1=fopen(\ system(\ printf(\注册账户\\n\ printf(\请输入用户名:\\n\ fflush(stdin);//清空缓冲区 gets(User);//获得输入用户名 printf(\请输入密码:\\n\ fflush(stdin);//清空缓冲区 for (i=0; i<20; i++) {

Pass[i] = getch();//逐次赋值,但不回显 printf(\以星号代替字符个数 if (Pass[i] =='\\r')//回车则终止循环 {

break; }

} //获得输入密码 strcpy(Linedata,User);//将读取到的,用户名,密码格式转变为data.txt中的格式 strcat(Linedata,\ strcat(Linedata,Pass); strcat(Linedata,\ strcat(Linedata,\ strcpy(Linedata1,User); strcat(Linedata1,\ while (!feof(fp1))//循环逐行读取data.txt将读取到的信息保存在数组Userdata中直到文件结束 { fgets(Userdata1,30,fp1); if (strcmp(Linedata1,Userdata1)==0 ) { printf(\该用户已经注册!\\n\ printf(\按任意键重新注册\\n\ getch(); UserReg(); } } fputs(Linedata,fp);//将这一行格式调整好的用户名 密码信息写入data.txt文件 fclose(fp);//关闭data.txt文件指针 fputs(Linedata1,fp1);//将这一行格式调整好的用户名 密码信息写入data.txt文件 fclose(fp1);//关闭文件指针 printf(\亲,注册成功喽,赶快去登录吧!\\n\ printf(\按任意键进入登陆界面\\n\

getch(); system(\ Login(); }

void Login() { int i; char choose; FILE *fp;//创建文件指针 int find=0; char User[20],Pass[20],Userstrcat[50]={0}; //用户名 密码 装用户信息的数组 用来存储格式调整后的用户名密码 char Userdata[50]={0};//用来存储从data.txt中读取的用户信息 fp = fopen(\读data.txt文件 system(\ printf(\登陆账号\\n\ printf(\请输入用户名:\\n\ fflush(stdin);//清空缓冲区 gets(User); //获得输入用户名 printf(\请输入密码:\\n\ fflush(stdin);//清空缓冲区 for (i=0; i<20; i++) { Pass[i] = getch();//逐次赋值,但不回显 printf(\以星号代替字符个数 if (Pass[i] == '\\r')//回车则终止循环 { break; } }//获得输入密码 strcpy(Userstrcat,User);//将读取到的 用户名 密码拷贝到Userstrcat 格式转变为 data.txt中的格式 strcat(Userstrcat,\ strcat(Userstrcat,Pass); strcat(Userstrcat,\ strcat(Userstrcat,\ while (!feof(fp))//循环逐行读取data.txt 将读取到的信息保存在数组Userdata 中 直到文件结束 { fgets(Userdata,50,fp); if (strcmp(Userdata,Userstrcat)==0 )//对比 读取到的Userdata 和 接收处理过格式的Userstrcat 如果相同 { system(\ printf(\ 登陆成功!\\n\输出欢迎登陆信息 printf(\欢迎您进入系统!\\n\输出欢迎登陆信息

联系客服:779662525#qq.com(#替换为@)