c++医院挂号系统设计Word文件下载.docx
《c++医院挂号系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++医院挂号系统设计Word文件下载.docx(61页珍藏版)》请在冰点文库上搜索。
3
19
石凌霖
SARS专科
6
卢瑞鹏
福禄寿健儿宝
2003/03/03
二:
应用层面说明:
医院挂号系统不仅可用在医院挂号上,也可用在其它具比对性质的系统上。
三:
数据结构说明:
为了处理这些复杂的数据,我们定义了六种数据结构来处理数据与数据之间复杂的关系:
1.储存诊别数据的数据结构(SUBJECT):
SUBJECT
字段意义
字段名称
诊别编号
intid
诊别名称
charname[80]
2.储存医生数据的数据结构(DOCTOR):
DOCTOR
医生编号
医生名称
3.储存药物数据的数据结构(MEDICINE):
MEDICINE
药物编号
药物名称
4.储存比对数据的数据结构(MATCH):
MATCH
比对编号
intsubject_id
intdoctor_id
intmedicine_id
5.储存病人数据的数据结构(PATIENT):
PATIENT
病人编号
病人名称
6.储存挂号数据的数据结构(REPORT):
REPORT
挂号编号
intpatient_id
chatpatient_name[80]
charsubject_name[80]
chardoctor_name[80]
charmedicine_name[80]
挂号日期
chardate[80]
四:
主程序与子程序剖析:
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;
//挂号档
structSUBJECTsubjects[SUBJECTS_NUM+1],sub;
//诊别资料
structDOCTORdoctors[DOCTORS_NUM+1],doc;
//医生资料
structMEDICINEmedicines[MEDICINES_NUM+1],med;
//药物资料
structMATCHmatches[MATCHES_NUM+1],mat;
//比对数据
structPATIENTpatients[PATIENTS_NUM+1],pat;
//病人资料
structREPORTreports[REPORTS_NUM+1],rep;
//挂号数据
intpos_sub;
//诊别数据位置
intpos_doc;
//医生数据位置
intpos_med;
//药物数据位置
intpos_mat;
//比对数据位置
intpos_pat;
//病人数据位置
intpos_rep;
//挂号数据位置
intchoice,result;
//选项与选项执行结果
if(!
(fp_subjects=fopen(SUBJECTS_FILE,"
r"
)))//开启诊别档
{
printf("
无法开启诊别文件,程序终止!
"
);
\n"
exit
(1);
}
(fp_doctors=fopen(DOCTORS_FILE,"
)))//开启医生档
无法开启医生文件,程序终止!
(fp_medicines=fopen(MEDICINES_FILE,"
)))//开启药物档
无法开启药物文件,程序终止!
(fp_matches=fopen(MATCHES_FILE,"
)))//开启比对档
无法开启比对文件,程序终止!
(fp_patients=fopen(PATIENTS_FILE,"
)))//开启病人档
fp_patients=fopen(PATIENTS_FILE,"
w"
(fp_reports=fopen(REPORTS_FILE,"
)))//开启挂号档
fp_reports=fopen(REPORTS_FILE,"
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)
*****************主选单*****************"
****************************************"
1.新增病人资料"
2.挂号"
3.查询某病人的就诊纪录"
4.查询某医生的看诊纪录"
5.结束"
请选择>
"
scanf("
%d"
&
choice);
//输入选项
switch(choice)
{
case1:
//新增病人资料
printf("
请输入病人编号>
scanf("
pat.id);
请输入病人名字>
%s"
pat.name);
if(searchPatient(patients,pat.id)>
0)
{
printf("
病人数据重复!
}
else
if(addPatient(patients,pat)>
{
printf("
新增病人资料成功\!
}
else
病人资料已满!
break;
case2:
//挂号
rep.patient_id);
//输入病人编号
pos_pat=searchPatient(patients,rep.patient_id);
if(pos_pat>
0)//如果有此病人编号
{
请输入挂号日期(ex.2002/04/20)>
scanf("
rep.date);
//输入挂号日期
showSubjects(subjects);
请输入诊别编号>
rep.subject_id);
//输入诊别编号
showDoctors(doctors);
请输入医生编号>
rep.doctor_id);
//输入医生编号
pos_mat=searchMatch(matches,rep.subject_id,rep.doctor_id);
if(pos_mat>
0)//如果此医生有看此诊别
//找出此诊别在诊别数据中的位置
pos_sub=searchSubject(subjects,matches[pos_mat].subject_id);
//找出此医生在医生数据中的位置
pos_doc=searchDoctor(doctors,matches[pos_mat].doctor_id);
//找出此医生看此诊别时所开的药物在药物数据中的位置
pos_med=searchMedicine(medicines,matches[pos_mat].medicine_id);
//找出此病人名字
strcpy(rep.patient_name,patients[pos_pat].name);
//找出此诊别名字
strcpy(rep.subject_name,subjects[pos_sub].name);
//找出此医生名字
strcpy(rep.doctor_name,doctors[pos_doc].name);
//找出此药物编号
rep.medicine_id=medicines[pos_med].id;
//找出此药物名字
strcpy(rep.medicine_name,medicines[pos_med].name);
//挂号
if(addReport(reports,rep)>
{
printf("
新增挂号资料成功\!
}
else
挂号数据已满!
else//如果此医生不看此诊别
此医生不看此诊别!
else//如果无此病人编号
无此病人编号!
case3:
//查询某病人的就诊纪录
queryByPatient(reports,pat.id);
case4:
//查询某医生的看诊纪录
showDoctors(doctors);
doc.id);
if(searchDoctor(doctors,doc.id)>
queryByDoctor(reports,doc.id);
无此医生编号!
case5:
//结束程序
fp_patients=fopen(PATIENTS_FILE,"
fp_reports=fopen(REPORTS_FILE,"
savePatients(patients,fp_patients);
saveReports(reports,fp_reports);
fclose(fp_patients);
fclose(fp_reports);
exit
(1);
default:
//无效的选项
无效的选项!
}
}
2.子程序initSubjects(),initDoctors(),initMedicines(),initMatches(),initPatients(),initReports():
初始化资料,在此仅举initSubjects()与initDoctors()两个例子,其它例子与这两个例子相似。
//初始化诊别资料
voidinitSubjects(structSUBJECTsubjects[])
inti;
for(i=1;
i<
=SUBJECTS_NUM;
i++)
subjects[i].id=-1;
//初始化医生资料
voidinitDoctors(structDOCTORdoctors[])
=DOCTORS_NUM;
doctors[i].id=-1;
3.子程序loadSubjects(),loadDoctors(),loadMedicines(),loadMatches(),loadPatients(),loadReports():
加载数据,在此仅举loadSubjects()与loadDoctors()两个例子,其它例子与这两个例子相似。
//加载诊别数据,回传加载数据笔数
intloadSubjects(structSUBJECTsubjects[],FILE*fp)
intcount;
count=0;
while(!
feof(fp))
count=count+1;
fscanf(fp,"
%d\t%s\n"
subjects[count].id,&
subjects[count].name);
returncount;
//加载医生数据,回传加载数据笔数
intloadDoctors(structDOCTORdoctors[],FILE*fp)
doctors[count].id,&
doctors[count].name);
4.子程序searchSubject(),searchDoctor(),searchMedicine(),searchPatient():
搜寻诊别数据,搜寻医生数据,搜寻药物数据,与搜寻病人数据;
搜寻的条件为搜寻符合的编号的数据;
如搜寻诊别数据为搜寻符合的诊别编号的数据。
//搜寻诊别数据,回传诊别数据位置
intsearchSubject(structSUBJECTsubjects[],intid)
intindex;
for(index=1;
index<
=SUBJECTS_NUM&
&
subjects[index].id!
=-1;
index++)
if(subjects[index].id==id)
returnindex;
return-1;
//搜寻医生数据,回传医生数据位置
intsearchDoctor(structDOCTORdoctors[],intid)
=DOCTORS_NUM&
doctors[index].id!
if(doctors[index].id==id)
//搜寻药物数据,回传药物数据位置
intsearchMedicine(structMEDICINEmedicines[],intid)
=MEDICINES_NUM&
medicines[index].id!
if(medicines[index].id==id)
//搜寻病人数据,回传病人数据位置
intsearchPatient(structPATIENTpatients[],intid)
=PATIENTS_NUM&
patients[index].id!
if(patients[index].id==id)
5.子程序searchMatch():
搜寻比对数据;
搜寻的条件与前述4个不太一样,为搜寻同时符合的诊别编号与医生编号的资料,也就是说,搜寻是否有某医生且看某诊别的资料。
//搜寻比对数据,回传比对数据位置
intsearchMatch(structMATCHmatches[],intsid,intdid)
=MATCHES_NUM&
matches[index].id!
if(matches[index].subject_id==sid&
matches[