c语言课程设计分析报告日程表Word文档格式.docx
《c语言课程设计分析报告日程表Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言课程设计分析报告日程表Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
5.设计完成后提交课程设计报告和源代码文件的电子文档。
三、课程设计工作进度计划:
第一天选择课程设计题目,分析课题的要求,确定设计方案;
第二天总体设计,模块划分
第三天绘制程序流程图;
第四天按功能模块编写详细设计说明;
第五天编写程序代码
第六天设计用户界面;
第七天运行与调试程序;
第八天写课程设计报告;
第九天完成软件的设计准备答辩
第十天提交课程设计报告;
面试或答辩。
四、主要参考资料
[1]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
[2]谭浩强.C程序设计题解与上机指导(第三版).北京:
清华大学出版社,2005
[3]HerbertSchildt.C语言大全(第四版).北京:
电子工业出版社,2004
[4]SamuelP.HarbisonⅢ,GuyL.Steele.C语言参考手册(第5版).北京:
机械工业出版社,2003
[5]程序设计语言课程设计指导书.
指导教师(签名):
教研室主任(签名):
2013年7月1日2013年7月12日
目录:
1.课程设计任务书**************2
2.目的及要求******************6
2.1课程设计目的
2.2课程设计要求
3.课程设计内容说明************7
3.1.程序功能介绍
3.2程序设计整体设计说明
3.3数据结构设计
3.4程序结构设计
3.41程序子程序及功能设计
3.42函数主要调用关系图
3.43各模块流程图
4.运行结果*******************17
5.源程序代码分析*************31
6.课程设计感悟***************42
2.目的及要求
2.1课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:
1)巩固和加深学生对C语言课程的基本知识的理解和掌握;
2)掌握C语言编程和程序调试的基本技能;
3)利用C语言进行基本的软件设计;
4)掌握书写程序设计说明文档的能力
5)提高运用C语言解决实际问题的能力。
1)分析课程设计题目的要求;
2)写出详细设计说明;
3)编写程序代码,调试程序使其能正确运行;
4)设计完成的软件要便于操作和使用,有整齐、美观的使用界面;
5)设计完成后提交课程设计报告和源代码文件的电子文档。
3.课程设计内容说明
本系统的主要功能是实现日程表的管理,有添加日程,删除日程,查询日程,显示日程,设置日程,修改日程,日程排序,读取日程,保存日程的功能。
每个日程的信息包括:
日程时间,日程名称,日程详情,日程提醒,日程标记。
本系统的主函数是整个程序的核心,子函数之间也是有联系的,对日程的删除,查询,显示,修改,保存,必须是在添加了日程,或者读取了日程的情况下进行的。
一些基本操作在子函数中多次重复使用,即可单独设定函数,多次调用即可。
运行程序开始后进入主菜单,用户即可选择选择要进行的操作,例如,1为添加日程,用户需输入相应信息。
选择2为删除日程,按照日期或者名称选中相应日程后,可以删除日程或者日程设置。
等等功能。
当选择不存在时提示用户选择错误并提示重新选择。
3.3题目要求
3.31.设计要求
基本功能:
添加日程信息;
删除日程信息;
查询管理;
设置管理;
拓展功能:
日程信息的修改;
设置修改;
设置删除;
创新(自拟)功能:
程序实现的其它功能由个人自拟。
3.32.设计要求具体说明
添加日程信息:
需要输入日期、时间及相关的事件名称,并提示是否有时间冲突。
删除日程信息:
需要输入日期、时间后,显示相关的事件名称,由用户确认是否删除。
查询功能:
a)查询提前提醒事件,即提示将要发生的日程信息;
b)查询某天的日程信息。
对已经过去和将要发生的事件要区别显示。
设置功能:
a)可以设置提前提醒的时间。
b)日程信息需写入文件,文件的建立自我定义。
c)输入的日期、时间要进行合理性检查。
d)设置提前提醒的时间,并进行合理性检查。
a)能进行日程表信息的修改;
b)设置信息的修改、删除。
3.33.提示:
定义合适的结构体类型,使用链表或数组的方式组织数据。
3.4数据结构设计
本系统包含的数据结构有:
structDate_time//定义时间结构体;
{intyear;
intmonth;
intday;
inthour;
intmin;
};
structricheng//定义日程结构体;
{
structDate_timedate;
structDate_timeremind_date;
charname[100];
chardetail[200];
structricheng*next;
};
3.5程序结构设计
3.51程序子程序及功能设计
intmain()//主函数
charMenu();
//显示菜单
intrunnian(intyear);
//判断是否闰年
inttime_panduan(structDate_timetime);
//检查输入时间是否合法
intdate_panduan(intyear,intmonth,intday);
//检查输入日期是否合法
structricheng*select_name_program();
//按照名称选择日程
voidshow(structricheng*p);
//显示指针指向的日程的信息
voidset_remind_program(structricheng*p);
//设置日程提醒的时间
structricheng*select_program();
//选择日程
voidadd();
//添加日程
voiddelet_zhiding_richeng(structricheng*p);
//删除指定日程
voiddelet();
//删除日程
voidsearch_zhiding_richeng(charname[100]);
//按名称查询指定日程
voidsearch();
//查询日程
voidxiugai();
//修改事日程信息
voidread();
//读取日程文件
voidwrite();
//写入日程文件
3.52函数主要调用关系图
3.53各模块流程图
●添加日程
●删除日程
●查询日程
●显示日程
●修改程序
●读取日程
●保存日程
4.运行结果
1.点击运行,出现如下界面,可根据提示,选择菜单,进行相关操作;
添加日程功能
2.选择菜单,输入1,进入添加日程功能,第一步:
提示输入日程的时间,第二步:
提示输入日程的名称,第三步:
提示输入日程的具体内容。
第四步:
进入设置界面,提示设置日程的提示时间。
输入完成后回车,日程的添加功能就完成了。
注意:
在这个功能里,对于时间和日期的合法性都有检查,如果输入的时间有错误,那么就会自动提示输入的不正确,请重新输入。
保存日程的功能
3.完成菜单一的添加日程功能后,按回车键返回主菜单,然后选择6,进入保存日程的功能,选择6后,点击回车,界面提醒“保存成功”,这时日程的保存就完成了,日程就保存在了“我的日程.txt”,文本文档里了。
我们就完成了对日程的写入保存功能。
文件的读取功能
4.完成日程的保存写入功能之后,就会自动返回主菜单,选择5,进入文件的读取功能,点击回车,屏幕上会显示已保存的日程的全部信息,包括日程日期,日程名称,详细信息,提醒时间;
进入查询日程功能
5.完成读文件功能之后,点击回车,回到主菜单就可以选择其他功能进行操作,例如选择3,进入查询日程功能,界面自动提醒:
1.查询指定日程,2.退出操作,选择1,查询指定日程,提示输入查询日程的名称
。
输入要查询的日程的名称后,关于这条日程的详细信息就会显示。
然后选择0,退出查询功能,返回主界面。
注意;
如果输入的日程名称不正确,系统会自动提醒,查找的日程不存在。
修改功能
6.返回主菜单后选择4,进入日程的修改功能,然后提示输入要修改的日程名称,输入名称,进入修改界面,1.修改日程时间,2.修改日程名称,3.修改日程详情,4.修改日程提醒时间,0.退出。
选择要修改的内容,如选择4修改日程的提醒时间,回车后,输入新的提醒时间,回车,选择0完成,回车,返回主菜单,然后选择6保存日程,再选择5,读取日程,界面就显示修改后的新日程的新信息了,这样的话,修改就成功了。
删除功能
6.完成修改功能后,回车进入主菜单,选择2,进入删除功能,输入要删除的日程名称,回车进入删除界面,选择1,确认删除,删除后,界面显示删除成功。
并返回主菜单。
选择6,保存删除,选择5,读取日程,就看不到刚刚删除的那条日程信息了。
5.源程序代码:
#include<
stdio.h>
stdlib.h>
//stdlib头文件里包含了C语言的一些函数
string.h>
//字符串头文件
#defineAsizeof(structricheng)//宏定义就是在程序编译前,用sizeof(structricheng)代替A
structricheng//定义日程结构体;
//包含了时间结构体
//提醒时间
}*head=NULL,*p0=NULL;
//*head指向开头,*p0指向末尾
charset[20];
//判断是否闰年
//检查输入时间是否正确
//检查输入日期是否正确
//显示指针指向的日程事件信息
//按名称选择日程
//选择日程
//设置日程提醒日期
//添加日程
//删除指定日程
//删除日程
//查询指定日程,按名称查询
//查询日程
//修改事日程
//读取日程
//写入文件
intmain()//主函数
{
structricheng*p;
//定义了结构体日程的指针
charx;
charfilename[100];
do
x=Menu();
switch(x)
{
case'
0'
:
printf("
\n*****谢谢使用*****\n\n"
);
break;
1'
add();
2'
delet();
3'
search();
4'
xiugai();
5'
read();
6'
write();
default:
printf("
菜单选择错误!
请重新选择!
"
}
}while(x!
='
return0;
}
charMenu()//显示菜单;
{
charx[10];
\n**************¥¥¥¥欢迎使用日程表系统¥¥¥¥****************\n"
1)添加日程\n"
2)删除日程\n"
3)查询日程\n"
4)修改日程\n"
5)读取日程\n"
6)保存日程\n"
0)退出操作\n"
**********************************************************\n\n"
请选择菜单序号0-6:
gets(x);
returnx[0];
}
voidadd()//添加日程;
structDate_timetime;
charRC_name[50];
charRC_detail[100];
{
printf("
请输入日程日期,时间(年-月-日时:
分):
\n"
scanf("
%d-%d-%d%d:
%2d"
&
time.year,&
time.month,&
time.day,&
time.hour,&
time.min);
}while(time_panduan(time)==0);
//输入日程时间
日程名称(100个字符以内):
scanf("
%s"
RC_name);
//输入日程名称
详细描述(200个字符以内):
RC_detail);
//输入日程详细信息
p=(structricheng*)malloc(A);
//Malloc向系统申请分配指定size个字节的内存空间
strcpy((*p).name,RC_name);
strcpy((*p).detail,RC_detail);
(*p).date.year=time.year;
//赋值
(*p).date.month=time.month;
(*p).date.day=time.day;
(*p).date.hour=time.hour;
(*p).date.min=time.min;
添加日程设置\n"
//添加日程的同时是否添加日程设置
set_remind_program(p);
//调用设置日程提醒时间的函数
if(head==NULL)//寻找插入位置,新添加的日程插到后面
head=p0=p;
p0->
next=NULL;
}
else
next=p;
p0=p;
//p0始终指向最后一个数据
\n-----------------------按回车键返回-----------------------\n"
intrunnian(intyear)//判断闰年;
intRN=0;
if((year%4==0&
&
year%100!
=0)||(year%400==0))
RN=1;
RN=0;
returnRN;
inttime_panduan(structDate_timetime)//检查输入时间是否正确
intY=1;
intday_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(runnian(time.year)==1)
day_of_month[1]=29;
if(time.year>
9999||time.year<
=0)
Y=0;
if(time.month>
12||time.month<
if(time.day>
day_of_month[time.month-1]||time.day<
if(time.hour>
24||time.hour<
0)
if(time.min>
60||time.min<
if(Y==0)
输入错误!
returnY;
intdate_panduan(intyear,intmonth,intday)//检查输入日期是否正确
intY=1;
if(runnian(year)==1)
if(year>
9999||year<
if(month>
12||month<
if(day>
day_of_month[month-1]||day<
if(Y==0)
returnY;
voidset_remind_program(structricheng*p)//设置日程提醒日期
请输入日程提醒时间(年-月-日时:
%d"
&
p->
remind_date.year,&
remind_date.month,&
remind_date.day,
remind_date.hour,&
remind_date.min);
getchar();
}while(time_panduan(p->
remind_date)==0);
//对输入的时间进行判断
voiddelet()//删除日程
p=select_program();
//调用选择日程函数
if(p==NULL)
return;
getchar();
delet_zhiding_richeng(p);
//调用删除指定日程的函数
voiddelet_zhiding_richeng(structricheng*p)//删除指定日程
structricheng*p_s;
structricheng*p_l;
ints=0;
intsure=0;
p_s=p_l=head;
while(p_s!
=NULL//指针不为空
&
(
strcmp(p_s->
name,p->
name)!
=0
||p_s->
date.year!
=p->
date.year
date.month!
date.month
date.day!
=