c++医院挂号系统设计.docx

上传人:b****9 文档编号:25324779 上传时间:2023-06-07 格式:DOCX 页数:61 大小:336.69KB
下载 相关 举报
c++医院挂号系统设计.docx_第1页
第1页 / 共61页
c++医院挂号系统设计.docx_第2页
第2页 / 共61页
c++医院挂号系统设计.docx_第3页
第3页 / 共61页
c++医院挂号系统设计.docx_第4页
第4页 / 共61页
c++医院挂号系统设计.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

c++医院挂号系统设计.docx

《c++医院挂号系统设计.docx》由会员分享,可在线阅读,更多相关《c++医院挂号系统设计.docx(61页珍藏版)》请在冰豆网上搜索。

c++医院挂号系统设计.docx

c++医院挂号系统设计

课程设计

医院挂号系统

一:

系统功能、输入数据、与输出数据:

医院挂号系统是一个可以让病人在线挂号并查询挂号纪录的系统,为了简化系统的复杂度,我们做了以下的假设:

1.诊别数据是给定的,不可新增;诊别数据只包含两样信息:

诊别编号与诊别名字。

2.医生资料是给定的,不可新增;医生数据只包含两样信息:

医生编号与医生名字。

3.药物资料是给定的,不可新增;药物数据只包含两样信息:

药物编号与药物名字。

4.可新增病人资料;病人数据只包含两样信息:

病人编号与病人名字。

5.可新增挂号数据;挂号数据包含几样信息:

挂号编号、病人编号、病人名字、诊别编号、诊别名字、医生编号、医生名字、药物编号、药物名字与挂号日期;挂号时,一旦某病人选择了某诊别与某医生,则系统将根据该诊别与该医生自动配置对应的药物。

有了以上的假设,我们应该要有以下这些档案:

诊别档:

用来提供诊别信息,档案的每一行应包含两个字段:

诊别编号与诊别名字。

subjects.log:

1骨科

2眼科

3SARS专科

医生檔:

用来提供医生信息,档案的每一行应包含两个字段:

医生编号与医生名字。

doctors.log:

1林庄杰

2许家荣

3萧博文

4林芳伶

5陈明江

6卢瑞鹏

药物檔:

用来提供药物信息,档案的每一行应包含两个字段:

药物编号与药物名字。

medicines.log:

1铁牛运功散

2十八铜人行气散

3福禄寿健儿宝

4爱之味麦仔茶

5统一埔里矿泉水

6黑松沙士

7东北三宝-人参,貂皮,乌拉草

8天山雪莲

9含笑半步癫

比对檔:

用来提供比对信息,所谓的比对信息就是哪科诊别配上哪位医生则开哪种药物,档案的每一行应包含四个字段:

比对编号、诊别编号、医生编号与药物编号。

matches.log:

1111

2122

3133

4144

5225

6236

7247

8258

9339

10341

11352

12363

病人檔:

用来提供病人信息,档案的每一行应包含两个字段:

病人编号与病人名字。

patients.log:

12吴柏宏

15黄俊育

19石凌霖

挂号檔:

用来提供挂号信息,档案的每一行应包含几个字段:

挂号编号、病人编号、病人名字、诊别编号、诊别名字、医生编号、医生名字、药物编号、药物名字与挂号日期。

reports.log:

1

12

吴柏宏

1

骨科

2

许家荣

2

十八铜人行气散

2003/01/01

2

15

黄俊育

2

眼科

4

林芳伶

7

东北三宝-人参,貂皮,乌拉草

2003/02/02

3

19

石凌霖

3

SARS专科

6

卢瑞鹏

3

福禄寿健儿宝

2003/03/03

二:

应用层面说明:

医院挂号系统不仅可用在医院挂号上,也可用在其它具比对性质的系统上。

三:

数据结构说明:

为了处理这些复杂的数据,我们定义了六种数据结构来处理数据与数据之间复杂的关系:

1.储存诊别数据的数据结构(SUBJECT):

SUBJECT

字段意义

字段名称

诊别编号

intid

诊别名称

charname[80]

2.储存医生数据的数据结构(DOCTOR):

DOCTOR

字段意义

字段名称

医生编号

intid

医生名称

charname[80]

3.储存药物数据的数据结构(MEDICINE):

MEDICINE

字段意义

字段名称

药物编号

intid

药物名称

charname[80]

4.储存比对数据的数据结构(MATCH):

MATCH

字段意义

字段名称

比对编号

intid

诊别编号

intsubject_id

医生编号

intdoctor_id

药物编号

intmedicine_id

5.储存病人数据的数据结构(PATIENT):

PATIENT

字段意义

字段名称

病人编号

intid

病人名称

charname[80]

6.储存挂号数据的数据结构(REPORT):

REPORT

字段意义

字段名称

挂号编号

intid

病人编号

intpatient_id

病人名称

chatpatient_name[80]

诊别编号

intsubject_id

诊别名称

charsubject_name[80]

医生编号

intdoctor_id

医生名称

chardoctor_name[80]

药物编号

intmedicine_id

药物名称

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("无法开启诊别文件,程序终止!

");

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)

{

case1:

//新增病人资料

printf("请输入病人编号>");

scanf("%d",&pat.id);

printf("请输入病人名字>");

scanf("%s",&pat.name);

if(searchPatient(patients,pat.id)>0)

{

printf("病人数据重复!

");

printf("\n");

}

else

{

if(addPatient(patients,pat)>0)

{

printf("新增病人资料成功\!

");

printf("\n");

}

else

{

printf("病人资料已满!

");

printf("\n");

}

}

break;

case2:

//挂号

printf("请输入病人编号>");

scanf("%d",&rep.patient_id);//输入病人编号

pos_pat=searchPatient(patients,rep.patient_id);

if(pos_pat>0)//如果有此病人编号

{

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_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)>0)

{

printf("新增挂号资料成功\!

");

printf("\n");

}

else

{

printf("挂号数据已满!

");

printf("\n");

}

}

else//如果此医生不看此诊别

{

printf("此医生不看此诊别!

");

printf("\n");

}

}

else//如果无此病人编号

{

printf("无此病人编号!

");

printf("\n");

}

break;

case3:

//查询某病人的就诊纪录

printf("请输入病人编号>");

scanf("%d",&pat.id);

if(searchPatient(patients,pat.id)>0)

{

queryByPatient(reports,pat.id);

}

else

{

printf("无此病人编号!

");

printf("\n");

}

break;

case4:

//查询某医生的看诊纪录

showDoctors(doctors);

printf("请输入医生编号>");

scanf("%d",&doc.id);

if(searchDoctor(doctors,doc.id)>0)

{

queryByDoctor(reports,doc.id);

}

else

{

printf("无此医生编号!

");

printf("\n");

}

break;

case5:

//结束程序

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()两个例子,其它例子与这两个例子相似。

流程图:

程序代码:

//初始化诊别资料

voidinitSubjects(structSUBJECTsubjects[])

{

inti;

for(i=1;i<=SUBJECTS_NUM;i++)

{

subjects[i].id=-1;

}

}

//初始化医生资料

voidinitDoctors(structDOCTORdoctors[])

{

inti;

for(i=1;i<=DOCTORS_NUM;i++)

{

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)

{

intcount;

count=0;

while(!

feof(fp))

{

count=count+1;

fscanf(fp,"%d\t%s\n",&doctors[count].id,&doctors[count].name);

}

returncount;

}

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)

{

intindex;

for(index=1;index<=DOCTORS_NUM&&doctors[index].id!

=-1;index++)

{

if(doctors[index].id==id)

{

returnindex;

}

}

return

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1