医院挂号系统设计.doc_第1页
医院挂号系统设计.doc_第2页
医院挂号系统设计.doc_第3页
医院挂号系统设计.doc_第4页
医院挂号系统设计.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

医院挂号系统一: 系统功能、输入数据、与输出数据: 医院挂号系统是一个可以让病人在线挂号并查询挂号纪录的系统,为了简化系统的复杂度,我们做了以下的假设:1. 诊别数据是给定的,不可新增;诊别数据只包含两样信息: 诊别编号与诊别名字。2. 医生资料是给定的,不可新增;医生数据只包含两样信息: 医生编号与医生名字。3. 药物资料是给定的,不可新增;药物数据只包含两样信息: 药物编号与药物名字。4. 可新增病人资料;病人数据只包含两样信息: 病人编号与病人名字。5. 可新增挂号数据;挂号数据包含几样信息: 挂号编号、病人编号、病人名字、诊别编号、诊别名字、医生编号、医生名字、药物编号、药物名字与挂号日期;挂号时,一旦某病人选择了某诊别与某医生,则系统将根据该诊别与该医生自动配置对应的药物。有了以上的假设,我们应该要有以下这些档案: 诊别档: 用来提供诊别信息,档案的每一行应包含两个字段: 诊别编号与诊别名字。subjects.log: 1 骨科2 眼科3 SARS专科医生檔: 用来提供医生信息,档案的每一行应包含两个字段: 医生编号与医生名字。doctors.log: 1 林庄杰2 许家荣3 萧博文4 林芳伶5 陈明江6 卢瑞鹏药物檔: 用来提供药物信息,档案的每一行应包含两个字段: 药物编号与药物名字。medicines.log: 1 铁牛运功散2 十八铜人行气散3 福禄寿健儿宝4 爱之味麦仔茶5 统一埔里矿泉水6 黑松沙士7 东北三宝-人参,貂皮,乌拉草8 天山雪莲9 含笑半步癫比对檔: 用来提供比对信息,所谓的比对信息就是哪科诊别配上哪位医生则开哪种药物,档案的每一行应包含四个字段: 比对编号、诊别编号、医生编号与药物编号。matches.log: 1 1 1 12 1 2 23 1 3 34 1 4 45 2 2 56 2 3 67 2 4 78 2 5 89 3 3 910 3 4 111 3 5 212 3 6 3病人檔: 用来提供病人信息,档案的每一行应包含两个字段: 病人编号与病人名字。patients.log: 12 吴柏宏15 黄俊育19 石凌霖挂号檔: 用来提供挂号信息,档案的每一行应包含几个字段: 挂号编号、病人编号、病人名字、诊别编号、诊别名字、医生编号、医生名字、药物编号、药物名字与挂号日期。reports.log: 112吴柏宏1骨科2许家荣2十八铜人行气散2003/01/01215黄俊育2眼科4林芳伶7东北三宝-人参,貂皮,乌拉草2003/02/02319石凌霖3SARS专科6卢瑞鹏3福禄寿健儿宝2003/03/03二: 应用层面说明: 医院挂号系统不仅可用在医院挂号上,也可用在其它具比对性质的系统上。三: 数据结构说明: 为了处理这些复杂的数据,我们定义了六种数据结构来处理数据与数据之间复杂的关系: 1. 储存诊别数据的数据结构(SUBJECT): SUBJECT字段意义字段名称诊别编号int id诊别名称char name802. 储存医生数据的数据结构(DOCTOR): DOCTOR字段意义字段名称医生编号int id医生名称char name803. 储存药物数据的数据结构(MEDICINE): MEDICINE字段意义字段名称药物编号int id药物名称char name804. 储存比对数据的数据结构(MATCH): MATCH字段意义字段名称比对编号int id诊别编号int subject_id医生编号int doctor_id药物编号int medicine_id5. 储存病人数据的数据结构(PATIENT): PATIENT字段意义字段名称病人编号int id病人名称char name806. 储存挂号数据的数据结构(REPORT): REPORT字段意义字段名称挂号编号int id病人编号int patient_id病人名称chat patient_name80诊别编号int subject_id诊别名称char subject_name80医生编号int doctor_id医生名称char doctor_name80药物编号int medicine_id药物名称char medicine_name80挂号日期char date80四: 主程序与子程序剖析: 1.主程序main(): 功能: 允许使用者输入选项(1.新增病人资料,2.挂号,3.查询某病人的就诊纪录,4.查询某医生的看诊纪录,或5.结束程序),并执行该选项的功能。流程图: 其中挂号功能比较复杂,因为我们必须判断1.某病人编号是否存在2.某病人所挂号的某医生是否有看某诊别3.某医生看某诊别时所开的药物的编号。 流程图: 程序代码: main()FILE * fp_subjects;/诊别档FILE * fp_doctors;/医生档FILE * fp_medicines;/药物档FILE * fp_matches;/比对档FILE * fp_patients;/病人檔FILE * fp_reports;/挂号档struct SUBJECT subjectsSUBJECTS_NUM+1, sub;/诊别资料struct DOCTOR doctorsDOCTORS_NUM+1, doc;/医生资料struct MEDICINE medicinesMEDICINES_NUM+1, med;/药物资料struct MATCH matchesMATCHES_NUM+1, mat;/比对数据struct PATIENT patientsPATIENTS_NUM+1, pat;/病人资料struct REPORT reportsREPORTS_NUM+1, rep;/挂号数据int pos_sub;/诊别数据位置int pos_doc;/医生数据位置int pos_med;/药物数据位置int pos_mat;/比对数据位置int pos_pat;/病人数据位置int pos_rep;/挂号数据位置int choice, result;/选项与选项执行结果if ( !(fp_subjects = fopen(SUBJECTS_FILE, r) )/开启诊别档printf(无法开启诊别文件, 程序终止!);printf(n);exit(1);if ( !(fp_doctors = fopen(DOCTORS_FILE, r) )/开启医生档printf(无法开启医生文件, 程序终止!);printf(n);exit(1);if ( !(fp_medicines = fopen(MEDICINES_FILE, r) )/开启药物档printf(无法开启药物文件, 程序终止!);printf(n);exit(1);if ( !(fp_matches = fopen(MATCHES_FILE, r) )/开启比对档printf(无法开启比对文件, 程序终止!);printf(n);exit(1);if ( !(fp_patients = fopen(PATIENTS_FILE, r) )/开启病人档fp_patients = fopen(PATIENTS_FILE, w);if ( !(fp_reports = fopen(REPORTS_FILE, r) )/开启挂号档fp_reports = fopen(REPORTS_FILE, w);initSubjects(subjects);/初始化诊别资料initDoctors(doctors);/初始化医生资料initMedicines(medicines);/初始化药物资料initMatches(matches);/初始化比对数据initPatients(patients);/初始化病人资料initReports(reports);/初始化挂号数据loadSubjects(subjects, fp_subjects);/加载诊别数据loadDoctors(doctors, fp_doctors);/加载医生数据loadMedicines(medicines, fp_medicines);/加载药物数据loadMatches(matches, fp_matches);/加载比对数据loadPatients(patients, fp_patients);/加载病人数据loadReports(reports, fp_reports);/加载挂号数据fclose(fp_subjects);fclose(fp_doctors);fclose(fp_medicines);fclose(fp_matches);fclose(fp_patients);fclose(fp_reports);while ( 1 )printf(*主选单*);printf(n);printf(*);printf(n);printf(1. 新增病人资料);printf(n);printf(2. 挂号);printf(n);printf(3. 查询某病人的就诊纪录);printf(n);printf(4. 查询某医生的看诊纪录);printf(n);printf(5. 结束);printf(n);printf(*);printf(n);printf(请选择 );scanf(%d, &choice);/输入选项switch ( choice )case 1 :/新增病人资料printf(请输入病人编号 );scanf(%d, &pat.id);printf(请输入病人名字 );scanf(%s, &);if ( searchPatient(patients, pat.id)0 )printf(病人数据重复!);printf(n);elseif ( addPatient(patients, pat)0 )printf(新增病人资料成功!);printf(n);elseprintf(病人资料已满!);printf(n);break;case 2 :/挂号printf(请输入病人编号 );scanf(%d, &rep.patient_id);/输入病人编号pos_pat = searchPatient(patients, rep.patient_id);if ( pos_pat0 )/如果有此病人编号printf(请输入挂号日期 (ex.2002/04/20) );scanf(%s, &rep.date);/输入挂号日期showSubjects(subjects);printf(请输入诊别编号 );scanf(%d, &rep.subject_id);/输入诊别编号showDoctors(doctors);printf(请输入医生编号 );scanf(%d, &rep.doctor_id);/输入医生编号pos_mat = searchMatch(matches, rep.subject_id, rep.doctor_id);if ( pos_mat0 )/如果此医生有看此诊别/找出此诊别在诊别数据中的位置pos_sub = searchSubject(subjects, matchespos_mat.subject_id);/找出此医生在医生数据中的位置pos_doc = searchDoctor(doctors, matchespos_mat.doctor_id);/找出此医生看此诊别时所开的药物在药物数据中的位置pos_med = searchMedicine(medicines, matchespos_mat.medicine_id);/找出此病人名字strcpy(rep.patient_name, patientspos_);/找出此诊别名字strcpy(rep.subject_name, subjectspos_);/找出此医生名字strcpy(rep.doctor_name, doctorspos_);/找出此药物编号rep.medicine_id = medicinespos_med.id;/找出此药物名字strcpy(rep.medicine_name, medicinespos_);/挂号if ( addReport(reports, rep)0 )printf(新增挂号资料成功!);printf(n);elseprintf(挂号数据已满!);printf(n);else/如果此医生不看此诊别printf(此医生不看此诊别!);printf(n);else/如果无此病人编号printf(无此病人编号!);printf(n);break;case 3 :/查询某病人的就诊纪录printf(请输入病人编号 );scanf(%d, &pat.id);if ( searchPatient(patients, pat.id)0 )queryByPatient(reports, pat.id);elseprintf(无此病人编号!);printf(n);break;case 4 :/查询某医生的看诊纪录showDoctors(doctors);printf(请输入医生编号 );scanf(%d, &doc.id);if ( searchDoctor(doctors, doc.id)0 )queryByDoctor(reports, doc.id);elseprintf(无此医生编号!);printf(n);break;case 5 :/结束程序fp_patients = fopen(PATIENTS_FILE, w);fp_reports = fopen(REPORTS_FILE, w);savePatients(patients, fp_patients);saveReports(reports, fp_reports);fclose(fp_patients);fclose(fp_reports);exit(1);break;default :/无效的选项printf(无效的选项!);printf(n);break;2.子程序initSubjects(),initDoctors(),initMedicines(),initMatches(),initPatients(),initReports(): 功能: 初始化资料,在此仅举initSubjects()与initDoctors()两个例子,其它例子与这两个例子相似。流程图: 程序代码: /初始化诊别资料void initSubjects(struct SUBJECT subjects)int i;for (i=1; i=SUBJECTS_NUM; i+)subjectsi.id = -1;/初始化医生资料void initDoctors(struct DOCTOR doctors)int i;for (i=1; i=DOCTORS_NUM; i+)doctorsi.id = -1;3.子程序loadSubjects(),loadDoctors(),loadMedicines(),loadMatches(),loadPatients(),loadReports(): 功能: 加载数据,在此仅举loadSubjects()与loadDoctors()两个例子,其它例子与这两个例子相似。流程图: 程序代码: /加载诊别数据, 回传加载数据笔数int loadSubjects(struct SUBJECT subjects, FILE * fp)int count;count = 0;while( !feof(fp) )count = count + 1;fscanf(fp, %dt%sn, &subjectscount.id, &);return count;/加载医生数据, 回传加载数据笔数int loadDoctors(struct DOCTOR doctors, FILE * fp)int count;count = 0;while( !feof(fp) )count = count + 1;fscanf(fp, %dt%sn, &doctorscount.id, &);return count;4.子程序searchSubject(),searchDoctor(),searchMedicine(),searchPatient(): 功能: 搜寻诊别数据,搜寻医生数据,搜寻药物数据,与搜寻病人数据;搜寻的条件为搜寻符合的编号的数据;如搜寻诊别数据为搜寻符合的诊别编号的数据。流程图: 程序代码: /搜寻诊别数据, 回传诊别数据位置int searchSubject(struct SUBJECT subjects, int id)int index;for (index=1; index=SUBJECTS_NUM & subjectsindex.id!=-1 ; index+)if ( subjectsindex.id=id )return index;return -1;/搜寻医生数据, 回传医生数据位置int searchDoctor(struct DOCTOR doctors, int id)int index;for (index=1; index=DOCTORS_NUM & doctorsindex.id!=-1 ; index+)if ( doctorsindex.id=id )return index;return -1;/搜寻药物数据, 回传药物数据位置int searchMedicine(struct MEDICINE medicines, int id)int index;for (index=1; index=MEDICINES_NUM & medicinesindex.id!=-1 ; index+)if ( medicinesindex.id=id )return index;return -1;/搜寻病人数据, 回传病人数据位置int searchPatient(struct PATIENT patients, int id)int index;for (index=1; index=PATIENTS_NUM & patientsindex.id!=-1 ; index+)if ( patientsindex.id=id )return index;return -1;5.子程序searchMatch(): 功能: 搜寻比对数据;搜寻的条件与前述4个不太一样,为搜寻同时符合的诊别编号与医生编号的资料,也就是说,搜寻是否有某医生且看某诊别的资料。流程图: 程序代码: /搜寻比对数据, 回传比对数据位置int searchMatch(struct MATCH matches, int sid, int did)int index;for (index=1; index=MATCHES_NUM & matchesindex.id!=-1 ; index+)if ( matchesindex.subject_id=sid & matchesindex.doctor_id=did )return index;return -1;6.子程序addPatient(),addReport(): 功能: 新增病人数据与新增挂号数据。流程图: 程序代码: /新增病人资料, 回传成功与否int addPatient(struct PATIENT patients, struct PATIENT pat)int i;for (i=1; i=PATIENTS_NUM; i+)if ( patientsi.id=-1 )patientsi = pat;return 1;return -1;/新增挂号资料, 回传成功与否int addReport(struct REPORT reports, struct REPORT rep)int i;for (i=1; i=REPORTS_NUM; i+)if ( reportsi.id=-1 )rep.id = i;reportsi = rep;return 1;return -1;7.子程序queryByPatient(),queryByDoctor(): 功能: 查询某病人的就诊纪录与查询某医生的看诊纪录。流程图: 程序代码: /查询某病人的就诊纪录, 回传显示数据笔数int queryByPatient(struct REPORT reports, int id)int count, i;printf(病人名字t诊别名字t医生名字t药物名字t挂号日期n);count = 0;for (i=1; i=REPORTS_NUM & reportsi.id!=-1 ; i+)if ( reportsi.patient_id=id )printf(%st%st%st%st%sn, reportsi.patient_name, reportsi.subject_name, reportsi.doctor_name, reportsi.medicine_name, reportsi.date);count = count + 1;return count;/查询某医生的看诊纪录, 回传显示数据笔数int queryByDoctor(struct REPORT reports, int id)int count, i;printf(病人名字t诊别名字t医生名字t药物名字t挂号日期n);count = 0;for (i=1; i=REPORTS_NUM & reportsi.id!=-1 ; i+)if ( reportsi.doctor_id=id )printf(%st%st%st%st%sn, reportsi.patient_name, reportsi.subject_name, reportsi.doctor_name, reportsi.medicine_name, reportsi.date);count = count + 1;return count;8.子程序showSubjects(),showDoctors(): 功能: 显示诊别数据与显示医生数据。流程图: 程序代码: /显示诊别数据, 回传显示数据笔数int showSubjects(struct SUBJECT subjects)int count;printf(诊别编号t诊别名字n);for (count=1; count=SUBJECTS_NUM & subjectscount.id!=-1 ; count+)printf(%dt%sn, subjectscount.id, );return count-1;/显示医生数据, 回传显示数据笔数int showDoctors(struct DOCTOR doctors)int count;printf(医生编号t医生名字n);for (count=1; count=DOCTORS_NUM & doctorscount.id!=-1 ; count+)printf(%dt%sn, doctorscount.id, );return count-1;9.子程序savePatients(),saveReports(): 功能: 储存病人数据与储存挂号数据。流程图: 程序代码: /储存病人数据, 回传储存数据笔数int savePatients(struct PATIENT patients, FILE * fp)int count;for (count=1; count=PATIENTS_NUM & patientscount.id!=-1 ; count+)fprintf(fp, %dt%sn, patientscount.id, );return count-1;/储存挂号数据, 回传储存数据笔数int saveReports(struct REPORT reports, FILE * fp)int count;for (count=1; counta.out一开始,程序会显示主选单: *主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*新增三名病人资料: *主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 1请输入病人编号 12请输入病人名字 吴柏宏新增病人资料成功!*主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 1请输入病人编号 15请输入病人名字 黄俊育新增病人资料成功!*主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 1请输入病人编号 19请输入病人名字 石凌霖新增病人资料成功!新增三笔挂号数据: *主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 2请输入病人编号 12请输入挂号日期 (ex.2002/04/20) 2003/01/01诊别编号 诊别名字1 骨科2 眼科3 SARS专科请输入诊别编号 1医生编号 医生名字1 林庄杰2 许家荣3 萧博文4 林芳伶5 陈明江6 卢瑞鹏请输入医生编号 2新增挂号资料成功!*主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 2请输入病人编号 15请输入挂号日期 (ex.2002/04/20) 2003/02/02诊别编号 诊别名字1 骨科2 眼科3 SARS专科请输入诊别编号 2医生编号 医生名字1 林庄杰2 许家荣3 萧博文4 林芳伶5 陈明江6 卢瑞鹏请输入医生编号 4新增挂号资料成功!*主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 2请输入病人编号 19请输入挂号日期 (ex.2002/04/20) 2003/03/03诊别编号 诊别名字1 骨科2 眼科3 SARS专科请输入诊别编号 3医生编号 医生名字1 林庄杰2 许家荣3 萧博文4 林芳伶5 陈明江6 卢瑞鹏请输入医生编号 6新增挂号资料成功!结束: *主选单*1. 新增病人资料2. 挂号3. 查询某病人的就诊纪录4. 查询某医生的看诊纪录5. 结束*请选择 5patients.log: 12 吴柏宏15 黄俊育19 石凌霖reports.log: 112吴柏宏1骨科2许家荣2十八铜人行气散2003/01/01215黄俊育2眼科4林芳伶7东北三宝-人参,貂皮,乌拉草2003/02/02319石凌霖3SARS专科6卢瑞鹏3福禄寿健儿宝2003/03/03六: 完整的程序代码: #include #include #defineSUBJECTS_FILEsubjects.log/诊别档#defineDOCTORS_FILEdoctors.log/医生档#defineMEDICINES_FILEmedicines.log/药物档#defineMATCHES_FILEmatches.log/比对档#definePATIENTS_FILEpatients.log/病人檔#defineREPORTS_FILEreports.log/挂号档#defineSUBJECTS_NUM10/诊别资料最大数目#defineDOCTORS_NUM50/医生资料最大数目#defineMEDICINES_NUM100/药物资料最大数目#defineMATCHES_NUM500/比对数据最大数目#definePATIENTS_NUM1000/病人资料最大数目#defineREPORTS_NUM5000/挂号资料最大数目struct SUBJECT/诊别资料int id;/诊别编号char name80;/诊别名字;struct DOCTOR/医生资料int id;/医生编号char name80;/医生名字;struct MEDICINE/药物资料int id;/药物编号char name80;/药物名字;struct MATCH/比对数据int id;/比对编号int subject_id;/诊别编号int doctor_id;/医生编号int medicine_id;/药物编号;struct PATIENT/病人资料int id;/病人编号char name80;/病人名字;struct REPORT/挂号数据int id;/挂号编号int patient_id;/病人编号char patient_name80;/病人名字int subject_id;/诊别编号char subject_name80;/诊别名字int doctor_id;/医生编号char do

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论