1、昆明理工大学程序设计语言课程设计昆明理工大学-程序设计语言课程设计课程设计课程名称: 程序设计语言课程设计 设计题目: 万年历的设计 通讯录的设计 学 院: 信息工程与自动化学院 专 业: 计算机科学与技术 年 级: 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 通讯
2、录的设计思路74、程序实现94.1基础程序设计源代码 94.2 万年历的程序源代码 124.3 通讯录的程序源代码 165、结果展示和程序分析 235.1基础程序的运行结果及分析 235.2 万年历的运行结果及分析 255.3通讯录的运行结果及分析 296、总结与体会341、课程设计目的和要求1.1 课程设计的目的:(1)复习、巩固C语言的基础知识,掌握C语言的编程技巧和上机调试程序的方法,进一步加深对C语言的理解和掌握。(2)为学生提供了一个既动手又动脑,独立实践的机会,掌握通过程序设计语言解决实际问题的方法、步骤,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提
3、高学生适应实际,实践编程的能力。(3)培养学生在项目开发中团队合作精神、创新意识及能力。1.2 课程设计的要求:(1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;(2)系统设计要实用,编程简练,可用,功能全面(3)说明书、流程图要清楚(4)记录设计情况(备查,也为编写设计说明书作好准备);(5)要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。(6)设计上交内容:设计报告一份(按格式书写);源程序盘一张(能编译成可执行文件并能正常运行,可一个班交一张光盘)。2、课程设计的内容2.1基础程序设计
4、本设计部分主要完成与链表操作相关的基本运算,其中包含:链表的建立、链表的输出、链表的插入、链表的删除等运算。2.2万年历的设计:要求:模仿现实生活中的挂历,能够显示年历、月历、日历,并具备退出功能。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。2.3 通讯录设计制作一个通讯录程序,该程序具有查找、添加、修改、删除功能。通讯录包括:姓名,电话,街道,城市,省,邮编等。模块设计参考: 第一个模块主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块Menu()的功能是:显示英文提示选单。第三个
5、模块Quit()的功能是:退出选单。第四个模块Create()的功能是:创建新的通讯录。第五个模块Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。第六个模块Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。第七个模块Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。第八个模块Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。第九个模块List()的功能是:显示通讯录中的所有记录。3、解决问题的思路和方
6、法3.1基础程序设计思路 用尾插法完成新建链表,反复调用menu()函数使用菜单,调用各个子函数实现对链表的初始化,删除,输出等操作。3.2万年历的程序流程图: 主要程序流程图:Memu-slect()=1Printf(“输入年月日计算星期”)开始Memu-slect()=2Memu-slect()=3Memu-slect()=4Printf(“输入年月日计算星期”)Printf(“输入年月日计算星期”)Printf(“输入年月日计算星期”)结束 具体对于月份和年份的程序图如下: 上图为计算星期方法 上图为打印日历程序图 3.3 通讯录的设计流程图:程序结构:通讯录菜单初始化信息查找通讯人更新
7、通讯人添加通讯人删除通讯人打印通讯录退出通讯录在尾部添加此人信息开始添加人信息添加结束调用print函数显示通讯录开始选择6显示结束4、程序实现:4.1基础程序设计的源代码:#include #include typedef struct node char 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
8、 () 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; else flag=0; r-next=NULL; return L;int DelList(linklist L,int i) Node *p,*r; int k; p=L; k=0; printf(未删除时的链表); p
9、rint(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不合理!); r
10、eturn 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; do printf(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);
11、 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() do menu(); while(1);4.2 万年历的
12、设计的程序源代码:#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);brea
13、k;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=firstda
14、y (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 ret
15、urn 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/1
16、00)%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
17、(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
18、;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 node char name20; char telephone20; char street20; char city20; char province20; char postn
19、umber20; 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
20、); 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,&
21、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
22、=57)!=1) printf(电话号码输入格式出错请重新输入n); goto loop; for(i=0;i=19;i+) if(postnumberi=0) break; if(48=postnumberi&postnumberinext=s; r=s; else flag=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; fre
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1