备忘录C语言
- 格式:doc
- 大小:554.74 KB
- 文档页数:31
/*湖南大学数学与应用数学胡凡C语言课程设计万年历+备忘录命令提示行完成于2011年完整版*//*-------------------------------我是分割线-------------------------------*/ /*命令行功能选项*//*-d:显示当月日历和当日备忘*//*-i:显示当月日历和添加当日备忘*//*-m:显示当月日历和修改当日备忘*//*-g:删除当日备忘*//*-t:删除全部备忘*//*-------------------------------我是分割线-------------------------------*/ /*头文件*/#include<stdio.h>#include<stdlib.h>#include<unistd.h> /*调用getopt函数*//*定义全局变量(各月所含天数)*/int a[]={0,31,0,31,30,31,30,31,31,30,31,30,31};/*定义结构体*/struct date_message{int year; /*年*/int month; /*月*/int day; /*日*/char memo[300]; /*备忘*/}date={1,1,1,"\0"};/*-------------------------------我是分割线-------------------------------*/ /*主函数*/int main(int argc,char *argv[]){/*函数声明*/void checkDate(); /*检查日期合法性*/ void show_calender(); /*显示日历*/void memo_written(); /*写入备忘*/void memo_modify(); /*修改备忘*/void memo_delete(); /*删除当日备忘*/void memo_delete_all(); /*删除全部备忘*/void memo_read(); /*读取备忘*//*定义变量*/int choice;/*使用getopt函数分析命令行参数,识别选项*/while((choice=getopt(argc,argv,"d:i:m:g:t"))!=-1){ /*选项*/switch(choice){ /*选项为d时,显示当月日历和当日备忘*/case 'd':/*调用atoi函数,将字符型数字转化为整型*/date.year=atoi(argv[2]);date.month=atoi(argv[3]);/*如果没有输入日期则不赋值*/if(atoi(argv[4])!=0)date.day=atoi(argv[4]);/*检查日期合法性*/checkDate();/*显示当日日历*/show_calender();/*显示备忘*/memo_read();break;/*选项为i时,显示当月日历和添加当日备忘*/case 'i':date.year=atoi(argv[2]);date.month=atoi(argv[3]);if(atoi(argv[4])!=0)date.day=atoi(argv[4]);checkDate();show_calender();memo_read();printf("请输入该日备忘\n");/*写入备忘*/memo_written();/*添加之后*/printf("添加之后的日历为\n");show_calender();memo_read();break;/*选项为m时,显示当月日历和修改当日备忘*/case 'm':date.year=atoi(argv[2]);date.month=atoi(argv[3]);if(atoi(argv[4])!=0)date.day=atoi(argv[4]);checkDate();show_calender();memo_read();printf("请输入该日修改后的备忘\n");/*修改备忘*/memo_modify();/*修改之后*/printf("修改之后的日历为\n");show_calender();memo_read();break;/*选项为g时,删除当日备忘*/case 'g':date.year=atoi(argv[2]);date.month=atoi(argv[3]);if(atoi(argv[4])!=0)date.day=atoi(argv[4]);checkDate();/*确认信息*/printf("确认要删除当日备忘吗(y/n)?");/*如果输入y的话删除*/if(getchar()=='y'||'Y')memo_delete();break;/*选项为t时,删除全部备忘*/case 't':/*确认信息*/printf("确认要删除全部备忘吗(y/n)?");/*如果输入y的话删除全部*/if(getchar()=='y'||'Y')memo_delete_all();getchar();break;}}printf("\t\t Please any key to continue…………");getchar();system("cls");return 0;}/*-------------------------------我是分割线-------------------------------*//*显示当月日历*/void show_calender(){/*函数调用声明*/int leap(int t_year);/*定义函数*/int sum=0,count=0,i,t,temp_year,temp_month,temp_day=-1;/*输出年月日*/printf("\n\t\t\t\t%d年%d月",date.year,date.month);if(date.day!=0)printf("%d日\n",date.day);else printf("1日\n");/*计算某月第一天是星期几,以2011年1月1日星期六为基点,计算某月第一天距离基点的天数除以7取余*//*当某年不低于2011年*/if(date.year>=2011){/*加上整年的天数*/for(temp_year=2011;temp_year<date.year;temp_year++)sum+=365+leap(temp_year);a[2]=(leap(date.year)==1)?29:28;/*加上整月的天数*/for(temp_month=1;temp_month<date.month;temp_month++)sum+=a[temp_month];/*计算某月第一天是星期几*/t=(sum%7>0)?sum%7:(sum%7+7);}/*当某年低于2011年*/if(date.year<2011){/*加上整年的天数*/for(temp_year=2011;temp_year>date.year+1;temp_year--)sum+=365+leap(temp_year-1);a[2]=(leap(date.year-1)==1)?29:28;/*加上整月的天数*/for(temp_month=12;temp_month>=date.month;temp_month--)sum+=a[temp_month];/*计算某月第一天是星期几*/t=(sum%7>=0)?(7-sum%7):(-sum%7);}/*输出当月日历*/printf("\n\t\t Sun Mon Tue Wed Thu Fri Sat\n\t\t ");/*输出一定数量的空格*/for(i=1;i<=5*t-2;i++){printf(" ");/*计数一行中已输出多少个位数*/count++;}/*逐行输出日历中的日期部分*/for(temp_day=1;temp_day<=a[date.month];temp_day++){/*如果有输入日期则特别标出*/if(temp_day==date.day){if(date.day<10)printf("\b[%d] ",date.day);else printf("\b[%d] ",date.day);}/*普通日期无特别表示*/else printf("%-5d",temp_day);/*计数增加*/count+=5;/*当一行已输出38个位数的时候换行(除每行开头的一堆空格外)*/if(count==38){printf("\n ");count=3;}}printf("\n");}/*-------------------------------我是分割线-------------------------------*//*备忘读取*/void memo_read(){/*定义文件指针*/FILE *fp;/*定义变量*/int i=0;struct date_message temp={0,0,0,"\0"};/*打开文件*/if((fp=fopen("calender","ab+"))==NULL){printf("\t\t\t\t\n");return;}/*查找文件中是否有相同的日期*/do{if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break;}while((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day));/*如果没有相同日期的话*/if((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day)) printf("\t\t\t\t该日暂无备忘\n\n");/*如果有相同日期的话*/else if(date.memo=="\0")printf("\n\t\t\t\t该日暂无备忘\n\n");/*有备忘则输出备忘*/else{for(i=0;i<300;i++)date.memo[i]=temp.memo[i];printf("\n\t\t\t备忘:%s\n\n",date.memo);}fclose(fp);}/*-------------------------------我是分割线-------------------------------*/ /*备忘写入*/void memo_written(){/*定义文件指针*/FILE *fp;/*打开文件*/if((fp=fopen("calender","ab+"))==NULL){printf("\n\t\t\t\t 打开文件失败\n\n\t\t\t ");return;}/*输入备忘*/scanf("%s",date.memo);/*写入备忘*/if(fwrite(&date,sizeof(struct date_message),1,fp)==1){system("cls");printf("\n\t\t\t\t 备忘存入成功\n\n\t\t\t ");}else{system("cls");printf("\n\t\t\t\t 备忘存入失败\n\n\t\t\t ");}getchar();fclose(fp);}/*-------------------------------我是分割线-------------------------------*/ /*备忘修改*/void memo_modify(){/*定义文件指针*/FILE *fp;/*定义变量*/int i=0;struct date_message temp;/*打开文件*/if((fp=fopen("calender","rb+"))==NULL){printf("\n\n\n\n\n\n\n\n\n\t\t\t 打开文件失败\n\n");return;}/*输入备忘*/scanf("%s",&date.memo);/*在文件中寻找该日期*/do{fseek(fp,i*sizeof(struct date_message),0);if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break;i++;}while((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day));/*如果没有的话添加备忘*/if((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day)) fwrite(&date,sizeof(struct date_message),1,fp);/*有的话修改*/else{fseek(fp,(i-1)*sizeof(struct date_message),0);fwrite(&date,sizeof(struct date_message),1,fp);}printf("\n\t\t\t\t 修改成功!\n\n");getchar();system("cls");fclose(fp);}/*-------------------------------我是分割线-------------------------------*//*当日备忘删除*/void memo_delete(){/*定义文件指针*/FILE *fp;/*定义变量*/struct date_message temp1={0,0,0,"\0"};struct date_message temp2;/*打开文件*/if((fp=fopen("calender","rb+"))==NULL){printf("打开文件失败\n\n");return;}/*在文件中查找是否有输入的年月日的信息*/do{fseek(fp,i*sizeof(struct date_message),0);if((fread(&temp2,sizeof(struct date_message),1,fp))!=1)break;i++;}while((temp2.year!=date.year)||(temp2.month!=date.month)||(temp2.day!=date.day));/*没有的话返回*/if((temp2.year!=date.year)||(temp2.month!=date.month)||(temp2.day!=date.day)){fclose(fp);printf("该日无备忘!\n\n");getchar();return;}else/*有的话覆盖*/{fseek(fp,(i-1)*sizeof(struct date_message),0);fwrite(&temp1,sizeof(struct date_message),1,fp);i++;printf("删除成功!\n\n");}getchar();fclose(fp);}/*-------------------------------我是分割线-------------------------------*//*全部备忘删除*/void memo_delete_all(){/*定义文件指针*/FILE *fp;/*定义变量*/struct date_message temp1={0,0,0,"\0"};struct date_message temp2;/*打开文件*/if((fp=fopen("calender","wb+"))==NULL){printf("打开文件失败\n\n");return;}/*将位置指针依次后移,将所有的内容覆盖*/do{fseek(fp,i*sizeof(struct date_message),0);if(fread(&temp2,sizeof(struct date_message),1,fp)!=1)break;fseek(fp,i*sizeof(struct date_message),0);fwrite(&temp1,sizeof(struct date_message),1,fp);i++;}while(1);printf("全部删除成功!\n\n");fclose(fp);}/*-------------------------------我是分割线-------------------------------*//*判断输入的日期是否合法*/void checkDate(){/*函数声明*/int leap(int t_year);/*如果给定的日期中年份部分为非正数*/if(date.year<=0){printf("年份不符合要求!\n");printf("请重新输入。
合作备忘录模板(标准版)1. 背景和目的该合作备忘录旨在确保参与方之间的合作关系能够得到明确和可执行的规定,并确定各方的权利和责任。
2. 参与方本合作协议由以下各方组成:- Party A: [输入第一方名称和信息]- Party B: [输入第二方名称和信息]- Party C: [输入第三方名称和信息]3. 合作内容各参与方同意在以下合作内容上进行合作:- 描述第一项合作内容- 描述第二项合作内容- 描述第三项合作内容4. 权利和责任4.1 各方的权利和责任应在本合作备忘录中明确规定,并予以执行和遵守。
4.2 Party A应承担的责任:- 列出Party A的责任和义务4.3 Party B应承担的责任:- 列出Party B的责任和义务4.4 Party C应承担的责任:- 列出Party C的责任和义务5. 保密条款各参与方同意保守合作期间的商业机密和敏感信息,并采取必要的保密措施,以防止未经授权的披露。
6. 期限和终止6.1 合作期限为[输入具体期限],自合作备忘录生效之日起计算。
6.2 任何一方可以在提前给予30天通知的情况下终止合作备忘录。
6.3 在合作备忘录终止后,各参与方应进行必要的交接,并解决未尽事宜。
7. 争议解决各参与方同意,如发生争议将首先进行友好协商。
若协商不能解决争议,各方同意将争议提交仲裁解决。
8. 适用法律和司法管辖权本合作备忘录受[输入适用的法律]的管辖,并应根据该法律进行解释和执行。
9. 其他条款[根据实际情况添加其他适当的条款]本合作备忘录在各方签字盖章之后生效,并具有法律约束力。
日期:[输入合作备忘录签署日期]各方签字盖章:Party A: __________________Party B: __________________Party C: __________________。
c++学生成绩备忘录(1)score.h#include<iostream>#include<string>//为了使用string类#include<vector>//vector数组的头文件#include<fstream>//文件操作的头文件#include<conio.h>//使用getch()函数#include<algorithm>//使用库函数sort进行排序using namespace std;class person{public:string Number;//学号string Name;//姓名string Class;//班级person(){}//缺省构造函数~person(){}//析构函数};class student:public person//学生类,继承person类{public:double Lesson_1;//课程1double Lesson_2;//课程2double Lesson_3;//课程3friend istream&operator>>(istream&in,student&t)//重载>>操作符{in>>t.Number>>>>t.Class>>t.Lesson_1>>t.Lesson_2>>t.Lesson_3;}friend ostream&operator<<(ostream&out,const student&t)//重载<<操作符{out<<t.Number<<"\t"<<<<"\t"<<t.Class<<"\t"<<t.Lesson_1<<"\t"<<t.Lesson_2<<"\t"<<t.Lesso n_3<<endl;}};class Admin//管理类{public:vector<student>stu;//vector数组void AddScore();//添加成绩void ShowScore();//显示成绩void ChangeScore();//修改成绩void ShowClass();//按班输出成绩单void DelScore();//删除学生成绩void SearchScore();//查找学生成绩void ShowSort();//按平均分排序int GetScore();//获取文件中的学生成绩void Keep();//保存为文件数据};(2)main.cpp#include"score.h"void Admin::AddScore()//添加成绩{student s;//定义student类的对象cout<<"Input Number:";cin>>s.Number;cout<<"Input Name:";cin>>;cout<<"Input Class:";cin>>s.Class;cout<<"Input学生课程1的成绩:";cin>>s.Lesson_1;cout<<"Input学生课程2的成绩:";cin>>s.Lesson_2;cout<<"Input学生课程3的成绩:";cin>>s.Lesson_3;stu.push_back(s);cout<<"学生成绩添加成功!"<<endl;}void Admin::ShowScore()//显示所有学生的成绩{vector<student>::iterator iter;//定义学生Vector数组的迭代器for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行{cout<<"Number:"<<iter->Number<<"Name:"<<iter->Name<<"Class:"<<iter->Class<<"课程1:"<<iter->Lesson_1<<"课程2:"<<iter->Lesson_2<<"课程3:"<<iter->Lesson_3<<"平均分:"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}}void Admin::ChangeScore()//修改学生成绩信息{if(stu.empty())//判断数组是否有学生成绩信息,{cout<<"暂无学生成绩信息,无法修改"<<endl;return;//返回主函数}string_name;cout<<"Input Name:";cin>>_name;vector<student>::iterator iter;//定义学生Vector数组的迭代器for(iter=this->stu.begin();iter!=this->stu.end();)//对vector数组进行遍历,调用begin()和end ()函数进行{if(iter->Name==_name)//根据输入的Name找到成绩信息{cout<<"Input Number:";cin>>iter->Number;cout<<"Input Class:";cin>>iter->Class;cout<<"Input课程1的成绩:";cin>>iter->Lesson_1;cout<<"Input课程2的成绩:";cin>>iter->Lesson_2;cout<<"Input课程3的成绩:";cin>>iter->Lesson_3;this->Keep();//调用keep函数将修改后的数据保存cout<<"修改成功!"<<endl;}elseiter++;}}void Admin::ShowClass()//按Class输出成绩单{string_Class;cout<<"Input Class:";cin>>_Class;if(Class!="网络1901"||Class!="网络1902"){cout<<"请在网络1901和网络1902两个班之间选择"<<endl'return;'}vector<student>::iterator iter;//定义学生Vector数组的迭代器for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行{if(iter->Class==_Class){cout<<"Number:"<<iter->Number<<"Name:"<<iter->Name<<"Class:"<<iter->Class<<"课程1:"<<iter->Lesson_1<<"课程2:"<<iter->Lesson_2<<"课程3:"<<iter->Lesson_3<<"平均分:"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}}}void Admin::DelScore()//删除学生成绩{if(stu.empty())//判断vector数组是否有学生成绩信息,{cout<<"暂无学生成绩信息,无法修改"<<endl;return;//返回主函数}string_name;cout<<"Input Name:";cin>>_name;vector<student>::iterator iter;//定义学生Vector数组的迭代器for(iter=this->stu.begin();iter!=this->stu.end();)//对vector数组进行遍历,调用begin()和end ()函数进行{if(iter->Name==_name){stu.erase(iter);//从vector数组中删除这条学生信息this->Keep();//保存学生信息}}}void Admin::SearchScore()//查询学生成绩信息{cout<<"1、按姓名查找"<<endl;cout<<"2、按学号查找"<<endl;int n;cout<<"请选择->";cin>>n;switch(n){case1:{string_name;cout<<"Input Name:";cin>>_name;vector<student>::iterator iter;//定义学生Vector数组的迭代器for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行{if(iter->Name==_name){cout<<"Number:"<<iter->Number<<"Name:"<<iter->Name<<"Class:"<<iter->Class<<"课程1:"<<iter->Lesson_1<<"课程2:"<<iter->Lesson_2<<"课程3:"<<iter->Lesson_3<<"平均分:"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}}}break;case2:{string_number;cout<<"Input Number:";cin>>_number;vector<student>::iterator iter;//定义学生Vector数组的迭代器for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行{if(iter->Number==_number){cout<<"Number:"<<iter->Number<<"Name:"<<iter->Name<<"Class:"<<iter->Class<<"课程1:"<<iter->Lesson_1<<"课程2:"<<iter->Lesson_2<<"课程3:"<<iter->Lesson_3<<"平均分:"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}}}}}bool operator<(student&A,student&B)//定义排序规则{return(A.Lesson_1+A.Lesson_2+A.Lesson_3)/3>(B.Lesson_1+B.Lesson_2+B.Lesson_3)/3; }void Admin::ShowSort()//按平均分排序{sort(stu.begin(),stu.end());//调用库函数sortvector<student>::iterator iter;//定义迭代器for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行循环{cout<<"Number:"<<iter->Number<<"Name:"<<iter->Name<<"Class:"<<iter->Class<<"课程1:"<<iter->Lesson_1<<"课程2:"<<iter->Lesson_2<<"课程3:"<<iter->Lesson_3<<"平均分:"<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}}int Admin::GetScore()//从文件中获取学生成绩数据{fstream readfile("score.txt");//打开文件操作int rows=0;if(readfile)//先判断文件是否存在,如果文件存在{student s;if(!(readfile>>s.Number>>>>s.Class>>s.Lesson_1>>s.Lesson_2>>s.Lesson_3))//如果第一次读取为空{cout<<"文件为空"<<endl;return1;}stu.push_back(s);//push_back将文件中的数据存入Vector数组中rows++;while(readfile>>s.Number>>>>s.Class>>s.Lesson_1>>s.Lesson_2>>s.Lesson_3) //读取后存入vector容器中{rows++;stu.push_back(s);//vector数组第要调用push_back函数进行读入}cout<<"数据读取成功!"<<endl;readfile.close();//文件操作完成后,需要关闭文件return rows;}else{ofstream outfile;//磁盘中不存在文件的话则创建outfile.open("score.txt");//创建通讯录文件if(!outfile.is_open())//未能打开新创建的文件{cout<<"文件没有创建!"<<endl;return-1;}else cout<<"文件为空"<<endl;outfile.close();//文件操作完成后,需要关闭文件}return2;}void Admin::Keep()//保存{ofstream outfile("score.txt");//打开文件vector<student>::iterator iter;//vector数组保存的磁盘文件for(iter=this->stu.begin();iter!=this->stu.end();iter++)//vector数组的头部要用begin(),尾部要用end(),从头到尾利用迭代器进行遍历{outfile<<iter->Number<<"\t"<<iter->Name<<"\t"<<iter->Class<<"\t"<<iter->Lesson_1 <<"\t"<<iter->Lesson_2<<"\t"<<iter->Lesson_3<<endl;}outfile.close();//关闭文件}int main(){int n;Admin a;//定义对象a.GetScore();//从文件中读取数据do{cout<<endl<<"学生成绩管理系统"<<endl;cout<<"1、添加学生成绩"<<endl;cout<<"2、显示学生成绩"<<endl;cout<<"3、修改学生成绩"<<endl;cout<<"4、按班级显示学生成绩"<<endl;cout<<"5、删除学生成绩"<<endl;cout<<"6、按平均分排序学生成绩"<<endl;cout<<"7、查询学生个人成绩"<<endl;cout<<"8、保存并退出"<<endl;cout<<"请选择";cin>>n;switch(n){case1:a.AddScore();getch();break;case2:a.ShowScore();getch();break;case3:a.ChangeScore();getch();break;case4:a.ShowClass();getch();break;case5:a.DelScore();getch();break;case6:a.ShowSort();getch();break;case7:a.SearchScore();getch();break;case8:exit(0);}}while(1);return0;。
**学院课程设计说明书(2012/2013学年第一学期)课程名称:软件程序设计题目:备忘录软件设计专业班级:学生姓名:放羊娃学号:指导教师:设计周数: 2周设计成绩:2013年1月18日目录1目的 (2)2设计部分 (2)2.1系统分析 (2)2.2系统设计 (2)2.2.1 系统备忘录系统的功能模块 (2)2.2.2系统流程图2.2.3 数据库系统设计 (3)3 系统功能图 (4)4设计步骤 (4)4.1建立数据库 (4)1.1建立表添加用户信息表(UserInfo)、备忘录信息表(MemoReminder)。
(4)4.2登录界面设计(frmLogin) (4)4.3主界面设计(frmMain) (5)4.3.1主菜单栏 (5)4.3.2 子菜单栏 (5)4.3.3 在主界面添加背景图片 (5)4.4修改密码 (5)4.4.1 在用户操作下拉菜单中的“修改密码”,可以修改当前用户的密码。
(5)4.5添加备忘内容 (5)4.5.1 设置添加备忘窗口 (5)4.5.2 数据库连接 (5)4.6编辑备忘内容 (5)4.7到时提醒界面设计 (6)4.7.1 到设置的时间后,会弹出此窗口 (6)4.7.2 按钮:“延时”按钮、“知道了”按钮 (6)4.8注册界面设计 (6)4.8.1 有三项内容: (6)4.8.2 按钮:“提交”按钮、“取消”按钮 (6)5程序设计 (7)5.1创建一个类,OperateDB。
(7)5.2实现不同用户登录 (8)5.3用户修改密码 (9)5.4用户修改和删除备忘内容 (10)5.5用户添加备忘内容,及设定铃声 (12)5.6备忘提醒用户 (13)5.7新用户注册 (16)6设计总结与结论 (17)7参考文献 (17)1目的本课程设计是电子工程专业的一门软件实践专业基础课,旨在提高学生的软件编程能力。
本设计将进一步加强学生对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用。
c语言备忘录课程设计一、课程目标知识目标:1. 学生能理解C语言中备忘录(函数、指针、数组)的基本概念及其在程序中的作用;2. 学生能掌握C语言中常用的数据结构和算法,并运用到备忘录的编写中;3. 学生能了解C语言的模块化编程思想,理解函数调用的原理及其在备忘录中的应用。
技能目标:1. 学生能运用C语言编写简单的备忘录程序,实现数据的存储、读取和修改;2. 学生能通过分析实际问题,运用所学知识设计并实现具有实际意义的备忘录功能;3. 学生能通过调试和优化程序,提高备忘录的运行效率,培养解决问题的能力。
情感态度价值观目标:1. 学生在学习和实践过程中,培养对编程的兴趣和热情,树立编程解决问题的信心;2. 学生在小组合作中,培养团队协作精神,提高沟通与表达能力;3. 学生通过解决实际问题,认识到编程在生活中的应用价值,增强学以致用的意识。
课程性质分析:本课程为C语言编程的进阶课程,以备忘录为主题,旨在帮助学生巩固C语言基础知识,提高编程实践能力。
学生特点分析:学生已具备C语言基础知识和简单的编程能力,具有一定的逻辑思维能力,但可能对复杂概念和实际应用场景的应对能力有限。
教学要求:1. 结合实际案例,引导学生掌握备忘录编程的核心知识;2. 注重实践操作,鼓励学生动手编写程序,培养解决问题的能力;3. 强调团队协作,提高学生的沟通与表达能力。
二、教学内容1. 备忘录概念与作用:介绍备忘录的定义、作用及其在实际编程中的应用场景,结合教材相关章节,让学生理解备忘录在程序设计中的重要性。
2. 基本数据结构:回顾数组、指针等基本数据结构,结合备忘录的需求,讲解如何选择合适的数据结构进行数据存储。
- 数组的使用与优化- 指针的概念与操作3. 函数与模块化编程:讲解函数的定义、调用、参数传递等概念,引导学生利用函数实现模块化编程,提高代码的可读性和可维护性。
- 函数的定义与调用- 参数传递与返回值- 递归函数的原理与应用4. 备忘录编程实践:通过实际案例,教授如何编写备忘录程序,实现数据的存储、读取和修改。
目录1.C语言设计模式(开篇) (2)2.C语言和设计模式(继承、封装、多态) (3)2.1继承性 (3)2.2封装性 (4)2.3多态 (4)3.单件模式 (4)4.工厂模式 (5)5.抽象工厂模式 (6)6.访问者模式 (8)7.状态模式 (9)8.命令模式 (9)9.解释器模式 (10)10.备忘录模式 (11)11.观察者模式 (12)12.桥接模式 (12)13.建造者模式 (13)14.中介者模式 (14)15.策略模式 (15)16.适配器模式 (16)17.装饰模式 (17)18.亨元模式 (17)19.代理模式 (18)20.外观模式 (19)21.迭代器模式 (20)22.责任链模式 (21)23.模版模式 (22)24.组合模式 (24)25.原型模式 (25)1.C语言设计模式(开篇)关于软件设计方面的书很多,比如《重构》,比如《设计模式》。
至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。
随着时间的推移,很多的方法又会被重新提出来。
其实,就我个人看来,不管什么方法都离不开人。
一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行,我写一行。
还是迭代?写三行,删掉两行,再写三行。
项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱、设计低劣、代码质量差、测试不到位等等。
就软件企业而言,没有比优秀的文化和出色的企业人才更重要的了。
从软件设计层面来说,一般来说主要包括三个方面:(1)软件的设计受众,是小孩子、老人、女性,还是专业人士等等;(2)软件的基本设计原则,以人为本、模块分离、层次清晰、简约至上、适用为先、抽象基本业务等等;(3)软件编写模式,比如装饰模式、责任链、单件模式等等。
从某种意义上说,设计思想构成了软件的主题。
软件原则是我们在开发中的必须遵循的准绳。
软件编写模式是开发过程中的重要经验总结。
灵活运用设计模式,一方面利于我们编写高质量的代码,另一方面也方便我们对代码进行维护。
《高级语言程序设计》课程设计说明书课程题目:备忘录设计目录1.设计任务书 (3)1.1 题目与要求 (3)1.2 本程序涉及的知识点 (4)2.功能设计 (4)2.2部分模块流程图 (5)3.C程序设计总结…………………………………………4.致谢………………………………………………………5、参考文献……………………………………………………6、程序源代码……………………………………………….1、设计任务书1.1、题目与要求备忘录设计要求有备忘录的输入,输出,修改以及查询功能1.2、本程序涉及的知识点变量的定义、输入和输出函数,结构体,图形界面设置等2、功能设计2.1、主要设计1、本程序实现的功能要求:利用switch语句完成所示的主菜单。
2.2、部分模块图3、C程序设计总结本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,能正确输出结果。
在刚开始的几次调试中曾经出现过不能运行、不能产生十以内随机数字、不能随机出现加减、不会正确输出结果、不能进行循环练习等等问题。
经过我的努力及同学的帮助,这些问题得到克服,并且使程序的功能也得到了一定的完善。
现在它能对出错的题目发出报警声,并且给出正确答案。
最后还能分别输出对错的题数及所得分数。
在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。
从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。
除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。
在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。
4、致谢能够完成这次课程设计必须感谢C语言课程老师杨先卫(是他教会了我C语言这门课程)、任江成同学(他帮我修改了几处重要错误,同时启发我完善了该程序的功能)。
#include <stdio.h>#include <stdlib.h>#define N 1000 //表示readBuffer和buffer数组的大小typedef struct MemoInfo{char event[200]; //用于存储事件int remindtime_year; //remindtime_***表示需要提醒的时间int remindtime_month;int remindtime_day;int remindtime_hour;int remindtime_minute;int remindtime_second;int inputtime_year; //inputtime_***表示输入的时间int inputtime_month;int inputtime_day;int inputtime_hour;int inputtime_minute;int inputtime_second;int value; //用于存储事件的重要性} MemoInfo;MemoInfo buffer[N]; //在需要输入事件的时候,先将输入的事件保存在这个数组上MemoInfo readBuffer[N]; //从文件memo中,读入事件,并将得到的事件保存在这个数组上//函数申明,函数定义在main函数之后,功能在函数定义那儿有解释int GetMemoInfo( MemoInfo * pmeinfo,FILE *fp);void PrintMemoInfo(MemoInfo meinfo ,int id);long GetTotal(int iyear,int imonth,int iday,int ihour,int iminute,int isecond);long GetBufferTotal( MemoInfo memo );int CheckRemind( int iyear,int imonth,int iday,int ihour,int iminute,int isecond , MemoInfo memo); int cmp(const void * a,const void *b );void welcome(){printf("\n\n\n\n\n");printf("\t\t ╭══════════════════════╮\n"); /*菜单选择*/printf("\t\t║\t║\n");printf("\t\t║\t║\n");printf("\t\t║欢迎使用本备忘录\t║\n");printf("\t\t║\t║\n");printf("\t\t║作者:XXX \t║\n");printf("\t\t║按任意键继续……\t║\n");printf("\t\t║\t║\n");printf("\t\t╰═══════════════════════╯\n");getchar();system("cls");}void main( int argc, char *argv )int l_choose=-1;int year,month,day,hour,minute,second;char infile[50]="memo.dat",outfile[50]="memo.dat";FILE *infp,*outfp;int minfo_number=0;char end='y',gtc,isPrintAll;int text_length,rbuf_num,count=1,i;long total1,total2,total3;welcome();printf("\t\t *******************************************\n");printf("\t\t *************** 作者XXX ************\n");printf("\t\t *******************************************\n\n"); while(1){printf("\n\n\n\n\n");printf("\t\t ╭═══════┤备忘录├══════════╮\n"); /*菜单选择*/ printf("\t\t║\t║\n");printf("\t\t║1. 添加备忘录\t║\n");printf("\t\t║2. 查看备忘录\t║\n");printf("\t\t║3. 退出软件\t║\n");printf("\t\t║\t║\n");printf("\t\t║\t║\n");printf("\t\t╰═══════════════════════╯\n");while( l_choose<1 || l_choose>3 ){printf("请选择您所需功能: ");scanf("%d",&l_choose);printf("\n");}if( l_choose==3 ){printf("\n谢谢您的使用\n");break;}else{//只读方式,打开文件名为infile的文件outfp=fopen(outfile,"ab+");fclose(outfp);infp=fopen(infile,"rb");if( infp==NULL ){//infp为空,说明无法打开文件printf("无法打开%s\n\n",infile);break;printf("***************************************************************\n");printf("* 输入时间的格式为: 2010/09/21/12:00:00 (注意不能有空格) *\n");printf("***************************************************************\n");printf("请输入当前时间:");scanf("%d/%d/%d/%d:%d:%d",&year,&month,&day,&hour,&minute,&second);rbuf_num=GetMemoInfo(readBuffer,infp);//这个就是传说中的qsort函数,忽略它qsort(readBuffer,rbuf_num,sizeof(MemoInfo),cmp);printf("\n******************事件提醒***************\n");for( i=0 ; i<rbuf_num ; i++ )if(CheckRemind(year,month,day,hour,minute,second,readBuffer[i]) ){PrintMemoInfo(readBuffer[i],count);count++;}printf("******************事件提醒结束***********\n\n");if( l_choose==1 ){//假如选择了1,输入备忘录事件outfp=fopen(outfile,"ab+");minfo_number=0;printf("************************************************\n");printf("* 输入备忘录事件格式*\n");printf("*请输入提醒时间:2010/09/21/00:00:00 *\n");printf("*请输入事件的重要性: 3 *\n");printf("* (注意:重要性的取值范围是1~3 *\n");printf("* 1代表一般事件; *\n");//说明输入事件顺序,按重要程度排序printf("* 2代表比较重要的事件; *\n");printf("* 3代表非常重要的事件) *\n");printf("请输入事件(以'*'字符结束): 生日快乐!* *\n");printf("************************************************\n");while( end!='n' ){buffer[minfo_number].inputtime_year=year;buffer[minfo_number].inputtime_month=month;buffer[minfo_number].inputtime_day=day;buffer[minfo_number].inputtime_hour=hour;buffer[minfo_number].inputtime_minute=minute;buffer[minfo_number].inputtime_second=second;printf("请输入提醒时间:");scanf("%d/%d/%d/%d:%d:%d",&buffer[minfo_number].remindtime_year,&buffer[minfo_number].remindtime_month,&buffer[minfo_n umber].remindtime_day,&buffer[minfo_number].remindtime_hour,&buffer[minfo_number].remindtime_minute,&buffer[minfo_number ].remindtime_second);printf("请输入事件的重要性");scanf("%d",&buffer[minfo_number].value);printf("请输入事件(以'*'字符结束): ");text_length=0;//输入事件内容while(1){gtc=getchar();if( gtc=='*' )break;else if( text_length<200-1 )buffer[minfo_number].event[text_length++]=gtc;}buffer[minfo_number].event[text_length]='\0';minfo_number++;getchar();printf("\n是否继续录入(y/n): ");scanf("%c",&end);}//将要输入的事件写入文件outfp中fwrite(buffer,sizeof(MemoInfo),minfo_number,outfp);fclose(outfp);printf("*****************完成备忘录存储***************\n");}else if( l_choose==2 ){getchar();printf("是否输出所有的事件(y/n): ");scanf("%c",&isPrintAll);if(isPrintAll=='y'){printf("\n**************输出所有事件开始***********\n");total1=GetTotal(year,month,day,hour,minute,second);count=1;for( i=0 ; i<rbuf_num ; i++ ){total2=GetBufferTotal(readBuffer[i]);if( total1<=total2 )PrintMemoInfo(readBuffer[i],count++);}printf("*************输出所有事件结束************\n\n");}while(1){printf("请输入两个时间段,查询该时间段内的事件\n");printf("时间段一: "); //查询两个时间段内事件scanf("%d/%d/%d/%d:%d:%d",&year,&month,&day,&hour,&minute,&second);printf("时间段二: ");scanf("%d/%d/%d/%d:%d:%d",&year,&month,&day,&hour,&minute,&second); total2=GetTotal(year,month,day,hour,minute,second);if( total1>total2 ){total3=total1;total1=total2;total2=total3;}printf("\n***********输出时间段内事件开始***********\n");for( i=0 ; i<rbuf_num ; i++ ){total3=GetBufferTotal(readBuffer[i]);if( total3>=total1 && total3<=total2 )PrintMemoInfo(readBuffer[i],count++);}printf("***********输出时间段内事件结束***********\n\n");getchar();printf("是否继续输入两个时间段(y/n): ");scanf("%c",&isPrintAll);if( isPrintAll=='n' )break;}}fclose(infp);}getchar();printf("是否返回主菜单(y/n): ");scanf("%c",&end);printf("\n\n\n\n");if( end=='n' )break;l_choose=-1;}}int cmp(const void * a,const void *b ){MemoInfo *aa,*bb ;long total1,total2;aa=(MemoInfo*)a;bb=(MemoInfo*)b;total1=GetBufferTotal(*aa);total2=GetBufferTotal(*bb);if( total1/(24*3600) > total2/(24*3600) )return 1;return 1;else if( total1 > total2 )return 1;return -1;}/***************************************** 功能:读取文件fp中的内容,并将内 ** 容保存在数组pmeinfo中** ** 返回值:读取的事件的数目。
2012-2013学年第二学期《高级语言程序设计》课程设计报告题目:备忘录专业:计算机科学与技术班级:姓名:指导教师:成绩:计算机与信息工程系年月日目录1设计内容及要求 (2)1.1设计内容 (2)1.2设计任务及具体要求 (2)2概要设计 (3)2.1该系统的功能简介 (3)2.2 总体程序框图 (3)2.3各个模块之间的主要关系 (4)33 设计过程或程序代码 (5)3.1各个模块的程序流程图及运行界面 (5)3.2对关键代码加以分析说明 (7)4程序调试分析 (13)5小结 (14)致谢 (15)参考文献 (16)附:源程序 (30)1 设计内容及要求1.1设计内容《备忘录》主要根据课程设计要求进行设计,能够进行个人的事件记录,可以将程序使用者的时间安排,重要事件,以及个人行程等事件做出具体详细的记述,并能够使使用者在程序上完成查看时间的功能,足以使得使用者避免忘记一些重要事件,也可以为使用者带来一些便利,帮助使用者节省了时间。
电子备忘录相较于笔记本,其最大的好处在于可以不受纸张的限制,并切实的使用者可以在短时间内记述大量事件;查询时也可以节省大量的时间,使得使用者可以减短查询时间,方便快捷。
同时,使用电子备忘录也是一种现代化的代表,将电子科技应用与人们的日常生活中,达到现代实惠的先进水平。
该系统功能主要包括三大模块:1)备忘录的信息录入2)备忘录信息的查看3)进出备忘录系统1.2设计任务及具体要求主要利用C语言的文件操作能力设计开发一个小型的备忘录系统,至少具有如下功能:备忘录的信息录入,备忘录的信息查询和退出备忘录系统。
操作界面要符合用户的一般习惯,图形或文本界面都可以。
要求:利用C语言编写一个备忘录程序,能实现一些基本的操作,达到一些基本的信息录入,查询,提醒以及编写等功能,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高自身用高级语言进行程序设计的能力,重点提高用C语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤;提高撰写技术文档的能力。
并且对C语言的一些基本语句以及功能有一些更加深刻的认识和理解。
能够利用C语言解决一些生活中的基本问题。
2 概要设计2.1系统的功能简介该系统的主要功能是实现重要信息的录入,包括录入的当前时间,事件的重要性以及提醒时间。
能够在设定时间内对使用者提醒,避免使用者忘记重要事件,造成不必要的麻烦。
2.2 总体程序框图图2.12.3各个模块之间的主要关系该程序的功能主要是实现备忘录的录入,能在系统内对录入的信息进行查询,并对相对重要的相应信息进行提醒。
各个模块之间的关系是相互联系的。
首先,主函数包含了所有的子函数。
主函数是整个程序的核心。
子函数之间也有联系的,对重要的信息查询,必须是在信息录入的情况下进行的。
因此对重要事件信息的录入时非常重要的。
在退出备忘录系统的子函数之间是没有多大联系的。
3 设计过程或程序代码3.1各个模块的程序流程图图3.13.2对关键代码加以分析说明1 ) 函数名称:main()函数功能:实现个人备忘录的主菜单显示功能和各个函数功能的调用功能函数参数:void函数返回值:void2 ) 函数名称:input_memo()函数功能:实现个人备忘内容的输入功能函数参数:void函数返回值:void3 ) 函数名称:search_memo()函数功能:实现个人备忘内容查询功能的菜单函数参数:void函数返回值:void4 ) 函数名称:search_by_name()函数功能:实现个人备忘内容通过备忘名称查询的功能函数参数:void函数返回值:void5 ) 函数名称:search_by_event_date()函数功能:实现个人备忘内容通过备忘时间查询的功能函数参数:void函数返回值:void6 ) 函数名称:modify_memo()函数功能:实现个人备忘内容修改功能的菜单函数参数:void函数返回值:void7 ) 函数名称:modify_by_name()函数功能:实现个人备忘内容通过备忘名称修改的功能函数参数:void函数返回值:void8 ) 函数名称:modify_by_event_date()函数功能:实现个人备忘内容通过备忘时间修改的功能函数参数:void函数返回值:void9 ) 函数名称:remind_me()函数功能:实现个人备忘的提醒功能函数参数:void函数返回值:void4 设计结果与分析1)运行备忘录程序运行程序,进入备忘录系统的主菜单,按照系统提示进行操作,完成系统的操作图4.12)输入数字进行菜功能的选择,输入数字1,执行输入新备忘的功能,调用输入新备忘的函数显示结果如下:图4.23)输入数字2,执行个人备忘的查询功能,调用备忘查询函数,显示备忘查询的功能菜单。
结果如下:图4.34)输入数字1,执行通过个人备忘的名称查询功能,调用备忘名称查询函数,显示通过备忘名称查询的结果,如下:图4.45)输入数字2,执行通过个人备忘的时间查询功能,调用备忘时间查询函数,显示通过备忘时间查询的结果,如下:图4.56)返回主菜单,输入数字3,执行个人备忘的修改功能,调用备忘修改函数,显示备忘修改的功能菜单。
结果如下:图4.67)输入数字1,执行通过个人备忘的名称修改功能,调用备忘名称修改函数,显示通过备忘名称修改的结果,如下:图4.78)输入数字2,执行通过个人备忘的时间修改功能,调用备忘时间修改函数,显示通过备忘时间修改的结果,如下:图4.89)返回主菜单,输入数字4,执行个人备忘的提醒功能,调用备忘提醒函数,显示备忘提醒的功能菜单。
结果如下:图4.9当把程序写好并进行调试时,并不是一帆风顺的,总会遇到很多在调试时遇到的错误。
(1)首先在定义函数时,不能输入汉字。
否则会程序会显示错误。
(2)如果要调用查询函数,增词函数,删除函数,修改函数等要在主函数前面进行申明,否则会显示警告。
(3)如果程序在运行的过程中,对于一个循环语句,如果你返回的值始终是真的,那么程序将进如死循环。
(4)对应该有花括弧的复合语句,忘记加花括弧。
(5)所调用的函数在调用语句之后才定义,而又在调用前未加说明。
5 小结在这次的课程设计中,我利用C语言完成了一个小型的备忘录系统,能够对信息进行录入与查询,并能够提醒用户。
通过实验,基本上掌握了C语言的基本用法与功能。
对于所学知识有了更深的认识。
在本课程设计的设计过程中,我刚开始感觉到有点头痛。
要通过一学期C语言的学习后将所学知识运用起来有点困难,但回过头来再去看教课书,对于这些知识点有关的背景,概念和解决方案更进一步的理解,感觉也不是很难。
另外我还体会了从事C语言课程设计工作需要特别谨慎认真地态度和作风,一点都不能马虎。
每个细微的细节都必须十分注意,如果不认真思考,就会出现或大或小的错误。
如果把早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时会推倒很多前面做的工作。
有时候,我自己觉得我写的程序非常正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间没有一点进展。
这时候,我一般是先自己通过书本,手册和资料找解决办法,实在没辙才向老师同学请教。
在开始编写程序的时候,我看到别人的程序功能非常的详细,而且界面非常漂亮,总是希望自己的程序也非常的完善,但是,发现编一个好的程序不是一蹴而就的事情,需要长时间的积累和经验。
在反反复复的学习中,我终于作出一个简单的程序,虽然这个程序的功能非常简单,而且在实际运用中还有些不足,因为工资的的内容非常丰富,我涉及到的仅仅是工资管理的一部分简单内容,离实际的客户需求肯定还有差距。
由于我的知识浅薄,经验不足及阅历颇浅,在该系统的设计方面还有很多不足,比如功能过少,界面不醒目等问题,我会在以后的学习过程中,根据具体要求不断的修改、完善,争取使系统慢慢趋于完美。
致谢在这次C语言课程设计中,我遇到了一些困难,因为通过书本以及自身的不足所难以解决。
所以我想任课老师进行了询问。
他给予了我一些代码以及注意事项上的帮助,使我能够完成这次课程设计。
在此,我对他们表示感谢!感谢他们在我面对困难时给了我帮助和支持。
也感谢那些给我帮助的所有同学!参考文献[1]谭浩强著.C程序设计.清华大学出版社,1999年第二版[2]谭浩强,张基温,唐永炎编著.C语言程序设计.高等教育出版社,1992[3]谭浩强编著.QBASIC语言教程.电子工业出版社,1997[4]谭浩强.C程序设计[M].清华大学出版社,2005[5]Herbert Schildt著.戴健鹏译.C语言大全.电子工业出版社,1994年第二版[6][美]SCHILDTH.C语言大全[M].王子恢等译.电子工业出版社,2001源程序#include<stdio.h>#include<string.h>#include<stdlib.h>#define Namelength 60#define Datelength 50#define Contentlength 800struct memo{char name[Namelength];char event_date[Datelength];char content[Contentlength];char remind_date[Datelength];};void input_memo();void search_memo();void modify_memo();void modify_name();void modify_by_event_date();void remind_me();void remind();void search_by_name();void search_by_event_date();void main(){FILE *fp;int number_menu;char a;printf("\n\n*-*-*-* 欢迎使用备忘录*-*-*-*\n"); loop:printf("\n\n*-*-*-* 备忘录主菜单*-*-*-*\n");printf(" ========================");printf("\n ‖ 1 输入新备忘; ‖");printf("\n ‖ ‖");printf("\n ‖ 2 查询备忘; ‖");printf("\n ‖ ‖");printf("\n ‖ 3 编辑备忘; ‖");printf("\n ‖ ‖");printf("\n ‖ 4 提醒我; ‖");printf("\n ‖ ‖");printf("\n ‖ 5 退出备忘; ‖\n");printf(" ========================");printf("\n请输入菜单功能的数字:");a = getch();if(a>='1'&&a<='5'){printf("\n\n您输入的数字是: %c",a);number_menu = (a - '0');}else{printf("\n\n您输入的数字是: %c",a);printf("\n\n对不起,您的输入有误,请输入正确的菜单功能数字,谢谢。