课程设计任务书题目C语言课程设计系(部) 信息科学与电气工程学院专业计算机科学与技术班级计职141学生姓名王雪学号*********06 月21 日至07 月04 日共 2 周指导教师院长2015 年6月23日一、课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++程序设计语言》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握结构化程序设计方法,熟悉面向对象程序设计方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
设计功能录入联系人信息(包括姓名、电话号码、地址等信息);通讯录管理系统要求实现以下功能:1、输入每一位联系人记录,将其信息存入文件中。
2、查询所有联系人的信息,并按可选的自定义规则进行排序;3、记录修改,将修改的记录信息保存于文件中。
设计要求1、设一个通信录由以下几项数据信息构成:数据项类型姓名字符串地址字符串邮政编码字符串电话号码字符串试为通信录数据定义类型和定义通信录变量,实现功能:存取、显示、删除记录、查询记录等功能。
2、要求:界面友好,易于操作总体设计系统功能模块图:添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱等后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件课程设计名称及内容课程设计名称:单项选择题标准化考试系统设计内容:设计并实现一个单项选择题标准化考试系统。
该系统可以完成试题录入、试题抽取、自动判卷等功能。
任务和要求功能要求:(1)用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)(2)试题录入:可随时增加试题到试题库中(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)(4)答题:用户可实现输入自己的答案(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
(二)其它要求:(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)主要知识点l 面向对象程序设计方法l 界面制作,switch的应用。
l 类和对象。
l 动态数组(链表)类模板。
l 文件的读写。
五、其他程序设计可在Microsoft VC++6.0、Borland C++ Builder环境下进行。
六、参考资料【1】《C语言程序设计》,谭浩强编,清华大学出版社,2008年出版【2】《C语言程序设计》,吴明发编,北京理工大学出版社,2007年出版【3】《C语言参考手册》邱仲潘机械工业出版社,2004年出版【4】《C语言课程设计案例精编》姜灵之清华大学出版社2008年出版详细设计(1).通讯录:主要代码#include<iostream.h>#include<fstream.h>#include<string.h>struct student //结构体{char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];};class inter{private:student st[35];public:void add(char no[13],char name[20],char address[100],char tel_no[12],char post _code[7],char e_mail[40]);void del(char name[20]);void find1(char no[13]);void find2(char name[20]);void list1();void list2();int correct(char name[20]);void read();void write();void format();int back(){cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back;cin>>back;if(back=='R'||back=='r')return 1;elsereturn 0;}void print(int i){cout<<"学号:"<<st[i].no<<endl;cout<<"姓名:"<<st[i].name<<endl;cout<<"地址:"<<st[i].address<<endl;cout<<"电话号码:"<<st[i].tel_no<<endl;cout<<"邮编:"<<st[i].post_code<<endl;cout<<"E_MAIL:"<<st[i].e_mail<<endl;}};//主函数首页int main(){inter a;a.format();char select1;cout<<endl;top:cout<<"\t\t 计职141 " <<endl <<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★" <<endl<<"\t\t※※" <<endl<<"\t\t※通迅录※" <<endl<<"\t\t※※" <<endl<<"\t\t※1. 通讯录编辑. 4. 按序排列 . ※" <<endl<<"\t\t※※" <<endl<<"\t\t※2. 查询显示 . 5. 读入数据 . ※" <<endl<<"\t\t※※" <<endl<<"\t\t※3. 保存记录 . 6. 格式化(慎用). ※" <<endl<<"\t\t※※" <<endl<<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★" <<endl<<"\t\t "<<endl<<en dl<<"\t\t\t选择:" ;cin>>select1;switch(select1){case '1':cout<<" (1)添加:"<<endl;cout<<" (2)删除:"<<endl;cout<<" (3)修改:"<<endl;char select2;cout<<" 请选择:"<<endl;cin>>select2;switch(select2){case '1':cout<<" 输入添加的资料:"<<endl;char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];cout<<" 输入学号:"<<endl;cin>>no;cout<<" 输入姓名:"<<endl;cin>>name;cout<<" 输入地址:"<<endl;cin>>address;cout<<" 输入电话号码:"<<endl;cin>>tel_no;cout<<" 输入邮编:"<<endl;cin>>post_code;cout<<" 输入E_mail:"<<endl;cin>>e_mail;a.add(no,name,address,tel_no,post_code,e_mail);cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_add;cin>>back_add;if(back_add=='R'||back_add=='r')goto top;elsegoto bottom;break;case '2':cout<<" 输入要删除人的姓名:"<<endl;char name2[20];cin>>name2;a.del(name2);cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_del;cin>>back_del;if(back_del=='R'||back_del=='r')goto top;elsegoto bottom;break;case '3':cout<<" 输入需要修改人的姓名:"<<endl;char name3[20];cin>>name3;if(a.correct(name3))goto top;else goto bottom;break;}break;case '2':cout<<" (1)根据姓名查找"<<endl;cout<<" (2)根据学号查找"<<endl;char select3;cout<<" 请选择: ";cin>>select3;switch(select3){case '1':char name4[20];cout<<" 输入姓名: ";cin>>name4;a.find2(name4);cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r')goto top;elsegoto bottom;break;case '2':char no4[13];cout<<" 输入学号: ";cin>>no4;a.find1(no4);cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_f2;cin>>back_f2;if(back_f2=='R'||back_f2=='r')goto top;elsegoto bottom;break;}break;case '3':a.write();cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_w;cin>>back_w;if(back_w=='R'||back_w=='r')goto top;elsegoto bottom;break;case '4':cout<<" (1)按学号排序:"<<endl;cout<<" (2)按姓名排序:"<<endl;cout<<" 请选择:";char select4;cin>>select4;switch(select4){case '1':a.list1();cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back;cin>>back;if(back=='R'||back=='r')goto top;elsegoto bottom;break;case '2':a.list2();cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;elsegoto bottom;break;}break;case '5':a.read();cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_r;cin>>back_r;if(back_r=='R'||back_r=='r')goto top;elsegoto bottom;break;case '6':cout<<" 请确认删除所有资料!(Y/N) ";char select5;cin>>select5;if(select5=='Y'||select5=='y')a.format();cout<<" 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ";char back_f;cin>>back_f;if(back_f=='R'||back_f=='r')goto top;elsegoto bottom;break;}bottom:cout<<" ★★★★★★★★★★★★欢迎使用本软件!★★★★★★★★★★★"<<endl;return 0;}//添加联系人void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char pos t_code[7],char e_mail[40]){int x=1;for(int i=0;i<35;i++){if(!strcmp(st[i].no,"0")){strcpy(st[i].address,address);strcpy(st[i].e_mail,e_mail);strcpy(st[i].name,name);strcpy(st[i].no,no);strcpy(st[i].post_code,post_code);strcpy(st[i].tel_no,tel_no);x=0;}if(x==0)break;}}//删除联系人void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){if(!strcmp(st[i].name,name)){strcpy(st[i].address,"0");strcpy(st[i].e_mail,"0");strcpy(st[i].name,"0");strcpy(st[i].no,"0");strcpy(st[i].post_code,"0");strcpy(st[i].tel_no,"0");}else x=0;}if(x==0)cout<<" error:输入姓名错误!"<<endl; }//修改联系人int inter::correct(char name[30]){int x;for(int i=0;i<35;i++){if(!strcmp(st[i].name,name))x=i;}char select;cout<<" (1)修改姓名:"<<endl;cout<<" (2)修改学号:"<<endl;cout<<" (3)修改地址:"<<endl;cout<<" (4)修改邮编:"<<endl;cout<<" (5)修改电话号码:"<<endl;cout<<" (6)修改E_MAIL:"<<endl;cout<<" 请选择:";cin>>select;switch(select){case '1':cout<<" 输入要修改的姓名:";char name1[30];strcpy(st[x].name,name1);cout<<" 修改成功!"<<endl;return back();break;case '2':cout<<" 输入要修改的学号:";char no1[13];cin>>no1;strcpy(st[i].no,no1);cout<<" 修改成功!"<<endl;return back();break;case '3':cout<<" 输入要修改的地址:";char address1[100];cin>>address1;strcpy(st[x].address,address1);cout<<" 修改成功!"<<endl;return back();break;case '4':cout<<" 输入要修改的邮编:";char post_code1[7];cin>>post_code1;strcpy(st[x].post_code,post_code1);cout<<" 修改成功!"<<endl;return back();break;case '5':cout<<" 输入要修改的电话号码:";char tel_no1[12];strcpy(st[x].tel_no,tel_no1);cout<<" 修改成功!"<<endl;return back();break;case '6':cout<<" 输入要修改的E_MAIL:";char e_mail1[40];cin>>e_mail1;strcpy(st[x].e_mail,e_mail1);cout<<" 修改成功!"<<endl;return back();break;}}//按学号查询联系人void inter::find1(char no[13]){int x,y=1,z=1;for(int i=0;i<35;i++){if(!strcmp(st[i].no,no)){x=i;z=0;}else y=0;if(z==0)break;}if(y==0)cout<<" 输入的学号查找不到"<<endl;print(x);}//按姓名查询联系人void inter::find2(char name[20]){int x,y=1,z=1;for(int i=0;i<35;i++){if(!strcmp(st[i].name,name)){x=i;z=0;}else y=0;if(z==0)break;}if(y==0)cout<<" 输入的姓名查找不到"<<endl;print(x);}//读取文件void inter::read(){char name1[20];cout<<" 输入你要导入的文件名: "; cin>>name1;strcat(name1,".txt");ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){for(int k=0;k<35;k++){if(time==0){strcpy(no,line);time=1;for(int i=0;i<120;i++){if(no[i]==':'){i++;for(int j=0;j<13;j++){st[k].no[j]=no[i];i++;}}}file.getline(line,120,'\n');}if(time==1){strcpy(name,line);time=2;for(int i=0;i<120;i++){if(name[i]==':'){i++;for(int j=0;j<20;j++){st[k].name[j]=name[i];i++;}}}file.getline(line,120,'\n');}if(time== 2){strcpy(address,line);time=3;for(int i=0;i<120;i++){if(address[i]==':'){i++;for(int j=0;j<100;j++){st[k].address[j]=address[i];i++;}}}file.getline(line,120,'\n');}if(time==3){strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){if(tel_no[i]==':'){i++;for(int j=0;j<12;j++){st[k].tel_no[j]=tel_no[i];i++;}}}file.getline(line,120,'\n');}if(time==4){strcpy(post_code,line);time=5;for(int i=0;i<120;i++){if(post_code[i]==':'){i++;for(int j=0;j<7;j++){st[k].post_code[j]=post_code[i];i++;}}}file.getline(line,120,'\n');}if(time==5){strcpy(e_mail,line);time=0;for(int i=0;i<120;i++){if(e_mail[i]==':'){i++;for(int j=0;j<40;j++){st[k].e_mail[j]=e_mail[i];i++;}}}file.getline(line,120,'\n');}}}file.close();}//写入文件void inter::write(){char name[20];cout<<" 输入要保存的文件名";cin>>name;strcat(name,".txt");ofstream savefile(name);for(int i=0;i<35;i++){savefile << "学号:"<<st[i].no<<endl;savefile << "姓名:"<<st[i].name<<endl;savefile << "地址:"<<st[i].address<<endl;savefile << "电话号码:"<<st[i].tel_no<<endl;savefile << "邮编:"<<st[i].post_code<<endl;savefile << "E_MAIL:"<<st[i].e_mail<<endl;}savefile.close();}//按学号排序void inter::list1(){for(int i=0;i<34;i++){for(int j=0;j<35-i;j++){if(strcmp(st[j].no,st[j+1].no)>0){char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);strcpy(st[j+1].no,no);strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name);strcpy(address,st[j].address);strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address);strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no);strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code);strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail);}}}for(int k=0;k<35;k++){int x=0;if(strcmp(st[k].no,"0")){print(k);x=1;}if(x==1){cout<<endl;cout<<"-----------------------------------------------------------------------------"< <endl;}}}//按姓名排序void inter::list2(){for(int i=0;i<34;i++){for(int j=0;j<35-i;j++){if(strcmp(st[j].name,st[j+1].name)>0){char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);strcpy(st[j+1].no,no);strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name);strcpy(address,st[j].address);strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address);strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no);strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code);strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail);}}}for(int k=0;k<35;k++){int x=0;if(strcmp(st[k].no,"0")){print(k);x=1;}if(x==1){cout<<endl;cout<<"---------------------------------------------------------------------"<<endl;}}}//格式化void inter::format(){for(int i=0;i<35;i++){strcpy(st[i].address,"0");strcpy(st[i].e_mail,"0");strcpy(st[i].name,"0");strcpy(st[i].no,"0");strcpy(st[i].post_code,"0");strcpy(st[i].tel_no,"0");}}(2).工作流程图:1.通讯录主界面2.添加:添加通讯录记录3.显示:查询通讯录记录4.删除:删除通讯录记录5.修改:修改通讯录记录小结(收获和建议)这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验,面对许多不懂得知识,通过他人的帮助,以及参考他人的成果,自己动手尝试,修改等,才完成。