




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计课程名称: 程序设计语言课程设计 设计题目: 万年历的设计 通讯录的设计 学 院: 信息工程与自动化学院 专 业: 计算机科学与技术 年 级: 2012 级 学生姓名: 邹华宇(201210405204) 指导教师: 王翊 日 期: 2013年 7月9日 教 务 处 制目 录1、课程设计目的和要求 11.1 课程设计的目的11.2 课程设计的要求12、课程设计的内容 2 2.1 基础程序设计22.2 万年历的设计22.3 通讯录的设计23、解决问题的思路和方法 43.1 基础程序设计思路43.2 万年历的设计思路43.3 通讯录的设计思路74、程序实现94.1基础程序设计源代码 94.2 万年历的程序源代码 124.3 通讯录的程序源代码 165、结果展示和程序分析 235.1基础程序的运行结果及分析 235.2 万年历的运行结果及分析 255.3通讯录的运行结果及分析 296、总结与体会341、课程设计目的和要求1.1 课程设计的目的:(1)复习、巩固C语言的基础知识,掌握C语言的编程技巧和上机调试程序的方法,进一步加深对C语言的理解和掌握。(2)为学生提供了一个既动手又动脑,独立实践的机会,掌握通过程序设计语言解决实际问题的方法、步骤,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。(3)培养学生在项目开发中团队合作精神、创新意识及能力。1.2 课程设计的要求:(1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;(2)系统设计要实用,编程简练,可用,功能全面(3)说明书、流程图要清楚(4)记录设计情况(备查,也为编写设计说明书作好准备);(5)要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。(6)设计上交内容:设计报告一份(按格式书写);源程序盘一张(能编译成可执行文件并能正常运行,可一个班交一张光盘)。2、课程设计的内容2.1基础程序设计本设计部分主要完成与链表操作相关的基本运算,其中包含:链表的建立、链表的输出、链表的插入、链表的删除等运算。2.2万年历的设计:要求:模仿现实生活中的挂历,能够显示年历、月历、日历,并具备退出功能。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。2.3 通讯录设计制作一个通讯录程序,该程序具有查找、添加、修改、删除功能。通讯录包括:姓名,电话,街道,城市,省,邮编等。模块设计参考: 第一个模块主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块Menu()的功能是:显示英文提示选单。第三个模块Quit()的功能是:退出选单。第四个模块Create()的功能是:创建新的通讯录。第五个模块Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。第六个模块Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。第七个模块Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。第八个模块Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。第九个模块List()的功能是:显示通讯录中的所有记录。3、解决问题的思路和方法3.1基础程序设计思路 用尾插法完成新建链表,反复调用menu()函数使用菜单,调用各个子函数实现对链表的初始化,删除,输出等操作。3.2万年历的程序流程图: 主要程序流程图:Memu-slect()=1Printf(“输入年月日计算星期”)开始Memu-slect()=2Memu-slect()=3Memu-slect()=4Printf(“输入年月日计算星期”)Printf(“输入年月日计算星期”)Printf(“输入年月日计算星期”)结束 具体对于月份和年份的程序图如下: 上图为计算星期方法 上图为打印日历程序图 3.3 通讯录的设计流程图:程序结构:通讯录菜单初始化信息查找通讯人更新通讯人添加通讯人删除通讯人打印通讯录退出通讯录创建通讯录开始检查输入格式输入各个信息初始结束NY显示此人信息开始比对姓名查找人信息查找结束NY显示无此人输入并更新此人信息开始比对姓名更新人的姓名更新结束NY显示无此人在尾部添加此人信息开始添加人信息添加结束删除此人信息开始比对姓名要删除人姓名删除结束NY显示无此人调用print函数显示通讯录开始选择6显示结束4、程序实现:4.1基础程序设计的源代码:#include #include typedef struct nodechar data;struct node *next;Node,*linklist;linklist H;void print(linklist L)Node *a;a=L-next;while(a!=NULL)printf(%c-,a-data);a=a-next;printf(n);linklist CreateFromTail ()linklist L;Node *s,*r;char c;int flag=1;L=(linklist)malloc(sizeof(Node);L-next=NULL;r=L;while(flag)c=getchar();if(c!=$)s=(Node*)malloc(sizeof(Node);s-data=c;r-next=s;r=s;elseflag=0;r-next=NULL;return L;int DelList(linklist L,int i)Node *p,*r;int k;p=L;k=0;printf(未删除时的链表);print(L);while(p-next!=NULL&knext;k=k+1;if(k!=i-1)printf(删除节点的位置i不合理!);return 0;r=p-next;p-next=p-next-next;free(r);return 1;int InsList(linklist L,int i,char e)Node *p,*s;int k;p=L;k=0; printf(未插入时的链表:);print(L); printf(n);while(p!=NULL&knext;k=k+1;if(k!=i-1)printf(插入节点的位置i不合理!);return 0;s=(Node*)malloc(sizeof(Node);s-data=e;s-next=p-next;p-next=s;return 1;void menu()char ch,e;int i,j;doprintf(tt#n);printf(tt 1.初始化链表n);printf(tt 2.插入链表n);printf(tt 3.删除链表n); printf(tt 4.输出链表n); printf(tt 5.退出系统n);printf(tt#n);printf(请输入1-5的数据n);scanf(n%2c,&ch); while (ch5|ch1);switch(ch)case 1:H=CreateFromTail();print(H);break;case 2:scanf(%d_%c,&i,&e); InsList(H,i,e);printf(插入后的链表:);print(H);break;case 3:scanf(%d,&j); DelList(H,j);printf(删除后的链表);print(H);break;case 4:printf(输出链表为);print(H);break; case 5:exit(0); void main() domenu();while(1);4.2 万年历的设计的程序源代码:#include #include #include void f()int day,month,year,sum,leap,S;printf(n请输入年月日n);scanf(%d%d%d,&year,&month,&day);while(1)if(month12|month31|day2)sum+;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;switch(S)case 1:printf(星期一n);break;case 2:printf(星期二n);break;case 3:printf(星期三n);break;case 4:printf(星期四n);break;case 5:printf(星期五n);break;case 6:printf(星期六n);break;case 0:printf(星期日n);break;void g()int i,j=1,k=1,a,b,month,year;printf(n输入年月:n);scanf(%d%d,&year,&month);while(1)if(month12|month1) printf(输入错误,重新输入); scanf(%d%d,&year,&month);else break;b=days_month(month,year);a=firstday (month,year);printf(*n);printf( Sun Mon Tue Wed Thu Fri Sat n);if(a=7)for(i=1;i=b;i+)printf(%4d,i);if(i%7=0)printf(n);if(a!=7)while (j=4*a)printf( );j+;for(i=1;i=b;i+)printf(%4d,i);if(i=7*k-a)printf(n);k+;printf(n*n);printf(n);int leap (int year)if(year%4=0&year%100!=0|year%400=0)return 1;else return 0;int days_month (int month,int year)if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)return 31;if(month=4|month=6|month=9|month=11)return 30;if(month=2&leap(year)=1) return 29;else return 28;int firstday(int month,int year)int W;W=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;return W;void h()int i,j=1,k=1,a,b,month,year,g;printf(n输入任意年:n);scanf(%d,&year);for(g=0;g=11;g+)month=g+1;b=days_month(month,year);a=firstday (month,year);printf(%d月n,month);printf(*n);printf( Sun Mon Tue Wed Thu Fri Sat n);if(a=7)for(i=1;i=b;i+)printf(%4d,i);if(i%7=0)printf(n);j=1;k=1;if(a!=7)while (j=4*a)printf( );j+;for(i=1;i=b;i+)printf(%4d,i);if(i=7*k-a)printf(n);k+;printf(n*n);printf(n);void main()for(;)switch(menu_select()case 1:printf(输入年月日计算星期几n);f();break;case 2:printf(打印任意日历n);g();break;case 3:printf(打印任意年历n);h();break;case 4:printf(谢谢使用!n);exit(0);int menu_select()char S;int cn;printf(1.输入年月日计算星期几n);printf(2.打印任意月历n);printf(3.打印任意年历n);printf(4.谢谢使用! n);printf(input 1-4:n);do S=getchar();cn=(int)S-48;while(cn6);return cn;4.3 通讯录的程序源代码:#include #include #include typedef struct nodechar name20;char telephone20;char street20;char city20;char province20;char postnumber20;struct node *next;Node,*linklist;linklist H;void print(linklist L)Node *a;a=L-next;while(a!=NULL)printf(-n); /*格式*/ printf(姓名 电话 街道 城市 省 邮政编码 n); printf(-n); printf(%-12s%-12s%-12s%-12s%-12s%-12sn,a-name,a-telephone,a-street,a-city,a-province,a-postnumber); printf(-n);a=a-next;printf(n);linklist Create()linklist L;Node *s,*r;char name20,telephone20,street20,city20,province20,postnumber20;int i;int flag=1;L=(linklist)malloc(sizeof(Node);L-next=NULL;r=L;while(flag)loop: printf(请按格式输入通讯人信息,例如:姓名 电话 街道 城市 省 邮编);printf(n);scanf(%s %s %s %s %s %s,&name,&telephone,&street,&city,&province,&postnumber);if(name0!=$)s=(Node*)malloc(sizeof(Node);strcpy(s-name,name);strcpy(s-telephone,telephone);strcpy(s-street,street);strcpy(s-city,city);strcpy(s-province,province);strcpy(s-postnumber,postnumber);for(i=0;i=19;i+) if(telephonei=0)break;if(48=telephonei&telephonei=57)!=1)printf(电话号码输入格式出错请重新输入n);goto loop;for(i=0;i=19;i+) if(postnumberi=0)break;if(48=postnumberi&postnumberinext=s;r=s; elseflag=0;r-next=NULL;return L;void Delete(linklist L)Node *p,*s;int k;char a20;p=L;k=0; printf(请输入你要更改的通讯人姓名); printf(n);scanf(%s,&a);while(1)if(strcmp(p-name,a)=0)printf(%s-%s-%s-%s-%s-%s,p-name,p-telephone,p-street,p-city,p-province,p-postnumber); s-next=s-next-next;free(p);printf(已经删除!n);break;s=p;p=p-next;if(p=NULL)printf(无此人);break;void Add(linklist L)Node *p,*e;p=L;while(1)if(p-next=NULL) e=(Node*)malloc(sizeof(Node); printf(请按格式输入添加通讯人的信息,例如:姓名 电话 街道 城市 省 邮编);printf(n); scanf(%s %s %s %s %s %s,e-name,e-telephone,e-street,e-city,e-province,e-postnumber);p-next=e;p-next-next=NULL;break;p=p-next;void Alter(linklist L)Node *p,*e;int k;char a20;p=L;k=0; printf(请输入你要更改的通讯人姓名); printf(n);scanf(%s,&a);while(1)if(strcmp(p-name,a)=0)e=(Node*)malloc(sizeof(Node); printf(请按格式输入要修改的通讯人的信息,例如:姓名 电话 街道 城市 省 邮编);printf(n); scanf(%s %s %s %s %s %s,e-name,e-telephone,e-street,e-city,e-province,e-postnumber);strcpy(p-name,e-name);strcpy(p-telephone,e-telephone);strcpy(p-street,e-street);strcpy(p-city,e-city);strcpy(p-province,e-province);strcpy(p-postnumber,e-postnumber);break;p=p-next;if(p=NULL)printf(无此人);break;void Find(linklist L)Node *p;char a20;p=L; printf(请输入你要更改的通讯人姓名); printf(n);scanf(%s,&a);while(1)if(strcmp(p-name,a)=0)printf(%s-%s-%s-%s-%s-%s,p-name,p-telephone,p-street,p-city,p-province,p-postnumber);printf(此人已查到!n);break;p=p-next;if(p=NULL)printf(无此人);break;void List()print(H);void quit()exit(0);void menu()char ch;doprintf(tt#n);printf(tt 1.创建通讯录n);printf(tt 2.查找通讯人信息 n);printf(tt 3.更新通讯信息 n);printf(tt 4.添加通讯人信息 n);printf(tt 5.删除通讯人信息n); printf(tt 6.打印通讯录n); printf(tt 7.退出通讯录n);printf(tt#n);printf(请输入1-7的数据n);scanf(n%2c,&ch); while (ch7|ch1);switch(ch)case 1:H=Create();print(H);break;case 2:Find(H);print(H);break;case 3:Alter(H);print(H);break;case 4:Add(H);print(H);break;case 5:Delete(H);print(H);break;case 6:List();break;case 7:quit(); void main()domenu();while(1);5、结果展示和程序分析5.1基础程序设计的运行结果截图初始化链表为god:在第二个结点插入o:删除结点3处的o:输出此时的链表并退出:5.2 万年历的运行结果截图万年历的日历功能的实现:月历功能的实现:年历功能的实现:5.3通讯录的运行结果截图初始化通讯录:查找段文亮的通讯信息:更新严明亮的信息:添加贝斯的通讯信息:删除贝斯的记录:显示全部通讯信息和退出:6、总结与体会在本次课程设计中,我学习了链表的创建,插入,删除,查找,输出等的方法,深有感触,用链表来存储数据是动态的,就与静态的数组作比较,自然要更加灵活,而且,规避了设置存储空间大小等用静态的数组必须考虑的问题,动态的链表使得程序更好地反映现实问题,以解决问题。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股东承担债务协议书范本
- 经销商商合同终止协议书
- 甲醇燃料灶安全协议合同
- 销售烟气喷淋泵合同范本
- 私人购买企业股份协议书
- 燃气委托执法协议书范本
- 绿化苗木劳务分包协议书
- 网络售货服务合同协议书
- 米糊或米粉批发合同范本
- 食堂财产交接协议书范本
- 基础会计-中职课件
- 平安建设评估方案(3篇)
- 2025年安庆怀宁县事业单位招聘考试试题【答案】
- 集团知识产权管理办法
- 华为品牌宣传管理办法
- 灭鼠灭蟑螂培训课件
- 2025年广东省中考英语试题卷(含答案解析)
- DB32∕T 4549-2023 绿色港口评价指标体系
- 浙江省温州市瑞安市2023-2024学年四年级下学期英语期末试卷6月(含答案)
- 高二文科考试数学试卷
- 2024年个人信用报告(个人简版)样本(带水印-可编辑)
评论
0/150
提交评论