收藏 分销(赏)

c语言专业课程设计方案报告.doc

上传人:二*** 文档编号:4512377 上传时间:2024-09-26 格式:DOC 页数:49 大小:1.51MB
下载 相关 举报
c语言专业课程设计方案报告.doc_第1页
第1页 / 共49页
本文档共49页,全文阅读请下载到手机保存,查看更方便
资源描述
上海应用技术学院 课 程 设 计 -第二学期 设计题目:日程管理 1.课程设计任务书 上海应用技术学院课程设计任务书 课程名称 程序设计语言课程设计 课程代码 B704010 设计题目 1. 算术练习 2. 个人收支管理 3. 通讯录 4. 成绩统计簿 5. 图书借阅管理 6. 日程表管理 题目序号 6 设计时间 7 月1 日—— 年 7 月 12日 系(院) 计算机和信息工程学院 专业 班级 一、 课程设计任务(条件)、具体技术参数(指标) 1. 在指导书提供课程设计题目中选择一题或自选(但需经过指导老师认可) 2. 每个题目限一人完成,题目选定后不可更换。 3. 用户提供主操作界面应该方便用户操作。 4. 最终提交课程设计结果包含: a) 课程设计汇报电子稿。 c) 源程序文件。 d) 可实施程序文件。 二、 对课程设计结果要求(包含课程设计说明书、图纸、图表、实物等软硬件要求) 1. 分析课程设计题目标要求; 2. 写出具体设计说明; 3. 编写程序代码,调试程序使其能正确运行; 4. 设计完成软件要便于操作和使用,有整齐、美观使用界面; 5. 设计完成后提交课程设计汇报和源代码文件电子文档。 三、 课程设计工作进度计划: 第一天 选择课程设计题目,分析课题要求,确定设计方案; 第二天 总体设计,模块划分 第三天绘制程序步骤图; 第四天 按功效模块编写具体设计说明; 第五天 编写程序代码 第六天 设计用户界面; 第七天运行和调试程序; 第八天写课程设计汇报; 第九天完成软件设计准备答辩 第十天 提交课程设计汇报;面试或答辩。 四、 关键参考资料 [1]谭浩强.C程序设计(第三版).北京:清华大学出版社, [2]谭浩强.C程序设计题解和上机指导(第三版).北京:清华大学出版社, [3] Herbert Schildt.C语言大全(第四版).北京:电子工业出版社, [4]Samuel P.Harbison Ⅲ,Guy L.Steele.C语言参考手册(第5版).北京:机械工业出版社, [5]程序设计语言课程设计指导书. 指导老师(署名): 教研室主任(署名): 7月1日 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语言处理实际问题能力。 2.2 课程设计要求 1) 分析课程设计题目标要求; 2) 写出具体设计说明; 3) 编写程序代码,调试程序使其能正确运行; 4) 设计完成软件要便于操作和使用,有整齐、美观使用界面; 5) 设计完成后提交课程设计汇报和源代码文件电子文档。 3.课程设计内容说明 3.1.程序功效介绍 本系统关键功效是实现日程表管理,有添加日程,删除日程,查询日程,显示日程,设置日程,修改日程,日程排序,读取日程,保留日程功效。每个日程信息包含:日程时间,日程名称,日程详情,日程提醒,日程标识。 3.2程序设计整体设计说明 本系统主函数是整个程序关键,子函数之间也是有联络,对日程删除,查询,显示,修改,保留,必需是在添加了日程,或读取了日程情况下进行。部分基础操作在子函数中数次反复使用,即可单独设定函数,数次调用即可。 运行程序 开始后进入主菜单,用户即可选择选择要进行操作,比如,1为添加日程,用户需输入对应信息。选择2为删除日程,根据日期或名称选中对应日程后,能够删除日程或日程设置。等等功效。当选择不存在时提醒用户选择错误并提醒重新选择。 3.3题目要求 3.31. 设计要求 基础功效: 添加日程信息; 删除日程信息; 查询管理; 设置管理; 拓展功效: 日程信息修改; 设置修改; 设置删除; 创新(自拟)功效: 程序实现其它功效由个人自拟。 3.32. 设计要求具体说明 添加日程信息: 需要输入日期、时间及相关事件名称,并提醒是否有时间冲突。 删除日程信息: 需要输入日期、时间后,显示相关事件名称,由用户确定是否删除。 查询功效: a) 查询提前提醒事件,即提醒将要发生日程信息; b) 查询某天日程信息。对已经过去和将要发生事件要区分显示。 设置功效: a) 能够设置提前提醒时间。 b) 日程信息需写入文件,文件建立自我定义。 c) 输入日期、时间要进行合理性检验。 d) 设置提前提醒时间,并进行合理性检验。 拓展功效: a) 能进行日程表信息修改; b) 设置信息修改、删除。 3.33. 提醒: 定义适宜结构体类型,使用链表或数组方法组织数据。 3.4数据结构设计 本系统包含数据结构有: struct Date_time //定义时间结构体; {int year; int month; int day; int hour; int min; }; struct richeng //定义日程结构体; { struct Date_time date; struct Date_time remind_date; char name[100]; char detail[200]; struct richeng *next; }; 3.5程序结构设计 3.51程序子程序及功效设计 int main() //主函数 char Menu(); //显示菜单 int runnian(int year); //判定是否闰年 int time_panduan(struct Date_time time); //检验输入时间是否正当 int date_panduan(int year,int month,int day); //检验输入日期是否正当 struct richeng * select_name_program(); //根据名称选择日程 void show(struct richeng *p); //显示指针指向日程信息 void set_remind_program(struct richeng *p) ; //设置日程提醒时间 struct richeng * select_program(); //选择日程 void add (); //添加日程 void delet_zhiding_richeng(struct richeng *p); //删除指定日程 void delet(); //删除日程 void search_zhiding_richeng(char name[100]); //按名称查询指定日程 void search(); //查询日程 void xiugai(); //修改事日程信息 void read(); //读取日程文件 void write(); // 写入日程文件 3.52函数关键调用关系图 3.53 各模块步骤图 l 添加日程 l 删除日程 l 查询日程 l 显示日程 l 修改程序 l 读取日程 l 保留日程 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> #include <stdlib.h> //stdlib 头文件里包含了C语言部分函数 #include <string.h> //字符串头文件 #define A sizeof(struct richeng) //宏定义 就是在程序编译前,用sizeof(struct richeng) 替换A struct Date_time //定义时间结构体; {int year; int month; int day; int hour; int min; }; struct richeng //定义日程结构体; { struct Date_time date; //包含了时间结构体 struct Date_time remind_date; //提醒时间 char name[100]; char detail[200]; struct richeng *next; }*head=NULL,*p0= NULL; //*head指向开头,*p0指向末尾 char set[20]; char Menu(); //显示菜单 int runnian(int year); //判定是否闰年 int time_panduan(struct Date_time time); //检验输入时间是否正确 int date_panduan(int year,int month,int day); //检验输入日期是否正确 void show(struct richeng *p); //显示指针指向日程事件信息 struct richeng * select_name_program(); //按名称选择日程 struct richeng * select_program(); //选择日程 void set_remind_program(struct richeng *p) ; //设置日程提醒日期 void add (); //添加日程 void delet_zhiding_richeng(struct richeng *p); //删除指定日程 void delet(); //删除日程 void search_zhiding_richeng(char name[100]); //查询指定日程,按名称查询 void search(); //查询日程 void xiugai(); //修改事日程 void read(); //读取日程 void write(); // 写入文件 int main() //主函数 { struct richeng *p; //定义了结构体日程指针 char x; char filename[100]; do { x=Menu(); switch(x) { case'0': printf("\n*****谢谢使用*****\n\n"); break; case'1': add(); break; case'2': delet(); break; case'3': search(); break; case'4': xiugai(); break; case'5': read(); break; case'6': write(); break; default: printf("菜单选择错误!请重新选择!"); } }while(x != '0'); return 0; } char Menu() //显示菜单 ; { char x[10]; printf("\n**************¥¥¥¥欢迎使用日程表系统¥¥¥¥****************\n"); printf(" 1)添加日程\n"); printf(" 2)删除日程\n"); printf(" 3)查询日程\n"); printf(" 4)修改日程\n"); printf(" 5)读取日程\n"); printf(" 6)保留日程\n"); printf(" 0)退出操作\n"); printf("**********************************************************\n\n"); printf("请选择菜单序号0-6:"); gets(x); return x[0]; } void add () //添加日程 ; { struct richeng *p; struct Date_time time; char RC_name[50]; char RC_detail[100]; do { printf("请输入日程日期,时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%2d",&time.year,&time.month,&time.day,&time.hour,&time.min); }while(time_panduan(time)==0); //输入日程时间 printf("日程名称(100个字符以内):\n"); scanf("%s",RC_name); //输入日程名称 printf("具体描述 (200个字符以内):\n"); scanf("%s",RC_detail); //输入日程具体信息 p=(struct richeng * )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; printf("添加日程设置\n"); //添加日程同时是否添加日程设置 set_remind_program(p); //调用设置日程提醒时间函数 if(head == NULL) //寻求插入位置,新添加日程插到后面 { head = p0 = p; p0->next = NULL; } else { p0->next = p; p0 = p; p0->next = NULL; //p0一直指向最终一个数据 } printf("\n-----------------------按回车键返回-----------------------\n"); } int runnian(int year) //判定闰年; { int RN=0; if( (year % 4 == 0 && year%100 != 0) || ( year % 400 == 0 ) ) RN=1; else RN=0; return RN; } int time_panduan(struct Date_time time) //检验输入时间是否正确 { int Y=1; int day_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 <= 0) Y=0; if(time.day>day_of_month[time.month-1] || time.day <= 0) Y=0; if(time.hour > 24 || time.hour < 0 ) Y=0; if(time.min > 60 || time.min < 0 ) Y=0; if(Y== 0) printf("输入错误!\n"); return Y; } int date_panduan(int year,int month,int day) //检验输入日期是否正确 { int Y= 1; int day_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if(runnian(year)==1) { day_of_month[1]=29; } if(year > 9999 || year <= 0) Y=0; if(month > 12 || month <= 0) Y=0; if(day>day_of_month[month-1] || day <= 0) Y=0; if(Y== 0) printf("输入错误!\n"); return Y; } void set_remind_program(struct richeng *p) //设置日程提醒日期 { do { printf("请输入日程提醒时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%d", &p->remind_date.year,&p->remind_date.month,&p->remind_date.day, &p->remind_date.hour,&p->remind_date.min); getchar(); }while(time_panduan(p->remind_date) == 0); //对输入时间进行判定 } void delet () //删除日程 { struct richeng *p; p=select_program(); //调用选择日程函数 if( p == NULL) { return; } getchar(); delet_zhiding_richeng(p); //调用删除指定日程函数 } void delet_zhiding_richeng(struct richeng *p) //删除指定日程 { struct richeng *p_s; struct richeng *p_l; int s = 0; int sure = 0; p_s = p_l = head; while( p_s != NULL //指针不为空 && ( strcmp(p_s->name,p->name) != 0 || p_s->date.year != p->date.year || p_s->date.month != p->date.month || p_s->date.day != p->date.day || p_s->date.hour != p->date.hour || p_s->date.min != p->date.min ) ) { p_l = p_s; p_s =p_s->next; //p_s指向指定日程,p_l指向此日程上一个 } //删除此日程事件 printf("确定删除?:\n"); printf("1.删除\n"); scanf("%d",&sure); getchar(); if(sure == 1) { if(p_s == head && p_s != NULL) head=p_s->next; else if(p_s != NULL) p_l->next = p_s->next; } printf("删除成功\n"); } struct richeng * select_program() //选择日程 { struct Date_time time; struct richeng *p,*p1; char select_event[50]; int sel =0; p=select_name_program(); return(p); //返回指向选中日程指针 } struct richeng * select_name_program() //按名称选择日程 { struct richeng *p; char select_event[50]; int i=0; printf("\n请输入日程名称:"); scanf("%s",select_event); p=head; printf("\n请确定日程信息:\n"); while( p !=NULL && strcmp(p->name,select_event) != 0) p=p->next; if(p == NULL) //假如没有找到指定日程 { printf("\n*****没有找到日程*****\n"); getchar(); return NULL; } show(p); return p; } void show(struct richeng *p) //显示指针指向日程事件信息 { struct tm *newtime; printf("$$$$$$$$$$$$$$$$$$$$$$$\n"); printf("*日程名称:%s\n",(*p).name); printf("*日程时间:%-4d-%-2d-%-2d %-d:%-2d\n", (*p).date.year, (*p).date.month, (*p).date.day, (*p).date.hour, (*p).date.min); printf("*日程详情:%s\n",p->detail); printf("*提醒时间:%-4d-%-2d-%-2d %-d:%-2d\n", (*p).remind_date.year, (*p).remind_date.month, (*p).remind_date.day, (*p).remind_date.hour, (*p).remind_date.min ); printf("\n"); } void search() //查询日程 { struct Date_time time; char RC_name[50]; int X =0; do { printf("\n请选择:\n"); printf("1.查询指定日程\n"); printf("0.退出操作:\n"); scanf("%d",&X); getchar(); switch(X) { case 0: break; case 1: printf("请输入事件名称:"); scanf("%s",RC_name); getchar(); search_zhiding_richeng(RC_name); break; default: printf("\n选择错误!\n\n"); } }while( X!= 0); } void search_zhiding_richeng(char name[50]) //查询指定日程,按名称查询 { struct richeng *p,*p_event; p=head; p_event = NULL; printf("\n******查询日程信息以下******\n\n"); while(p != NULL) { if(strcmp((*p).name, name) == 0) { p_event = p; show(p); } p = (*p).next; } //假如一直没有找到指定日程 if(p_event == NULL) { printf("\n*****无查询日程*****\n"); } } void xiugai() { struct richeng *p; struct Date_time time; struct Date_time remind_time; char RC_name[100]; char RC_detail[200]; int s = 0; p=select_program(); //选中日程事件 if( p == NULL) { printf("\n*****无查找信息*****\n"); getchar(); return; } do { printf("\n**请选择要修改项目**\n"); printf("1.修改日程时间\n"); printf("2.修改日程名称\n"); printf("3.修改日程详情\n"); printf("4.修改日程提醒\n"); printf("0.完成\n"); scanf("%d",&s); getchar(); switch(s) { case 0: break; case 1: //输入日程时间 printf("请输入日程日期,时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%d", &time.year,&time.month,&time.day,&time.hour,&time.min); (*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; break; case 2: //输入日程名称 printf("日程事件名称(100个字符以内):\n"); scanf("%s",RC_name); strcpy((*p).name, RC_name); break; case 3: //输入日程详情 printf("具体描述 (200个字符以内:)\n"); scanf("%s",RC_detail); strcpy((*p).detail, RC_detail); break; case 4: //输入提醒时间 printf("提醒日程日期,时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%d", &remind_time.year, &remind_time.month, &remind_time.day, &remind_time.hour, &remind_time.min); (*p).remind_date.year = remind_time.year; (*p).remind_date.month = remind_time.month; (*p).remind_date.day = remind_time.day; (*p).remind_date.hour = remind_time.hour; (*p).remind_date.min = remind_time.min; break; default: printf("\n菜单选择错误!请重新选择!\n"); } }while( s != 0); } void read() { struct richeng *p; FILE *fp; fp = fopen("我日程.txt","rb"); if(fp == NULL) { printf("\n文件无法打开!\n"); exit (0); } head = NULL; printf("\n*****读取信息以下*****\n\n"); while(!feof(fp)) //指向文件末尾 { p=(struct richeng *) malloc(A); if(fread(p,A,1,fp) != 1) //用sizeof(struct richeng) 替换A break; show(p); if(head == NULL)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服