doc

C语言大作业

  • 1星
  • 日期: 2015-09-20
  • 大小: 751KB
  • 所需积分:1分
  • 下载次数:0
  • favicon收藏
  • rep举报
  • free评论
标签: 大作业

大作业

上C语言课程的同学的大作业

文档内容节选

学 院 理学院 班 级 11021302 学 号 2013302735 姓 名 蔡建文 摘要 请你先撰写摘要,它简要叙述了你的大作业内容基 本设计思路完成情况和使用到的新技术新思想,还 有你自己对你自己结果的评价等 注意:这个文档中有许多这样的注释象C一样,它 的目的是引导你正确写作这份报告,因此,在报告完成 后,请将这些注释信息删除,但是不要损坏那些正式的 内容和排版格式 这页是封面 在Word文件属性菜单上,打开属性对话框,将你 的邮件地址填入作者栏中,则页脚中的信息回自动改 ......

|学 院 |理学院 | |班 级 |11021302 | |学 号 |2013302735 | |姓 名 |蔡建文 | 摘要 /*请你先撰写摘要,它简要叙述了你的大作业内容、基 本设计思路、完成情况和使用到的新技术、新思想,还 有你自己对你自己结果的评价等。*/ /*注意:这个文档中有许多这样的注释(象C一样),它 的目的是引导你正确写作这份报告,因此,在报告完成 后,请将这些注释信息删除,但是不要损坏那些正式的 内容和排版格式*/ /*这页是封面*/ /*在Word“文件”/“属性”菜单上,打开属性对话框,将你 的邮件地址填入“作者”栏中,则页脚中的信息回自动改 变过来。*/ /*这个Word的文件名按下面的规则重命名(本次程序设 计报告与程序等全部资料由计算机归档,因此请你按要 求编写): IE你的班级_你的学号_你的姓名.DOC 例如:10100501班李小明(2009309876)应为: IE10100501_2009309876_李小明.DOC 当报告与程序全部完成后,将本Word文件和程序压缩包 文件上传到网络硬盘中的“APP”文件夹上。*/ [pic] 目录 1 摘要 3 1.1 设计题目 3 1.2 设计内容 3 1.3 开发工具 3 1.4 应用平台 3 2 详细设计 3 2.1 程序结构 3 2.2 主要功能 3 2.3 函数实现 3 2.4 开发日志 4 3 程序调试及运行 4 3.1 程序运行结果 4 3.2 程序使用说明 4 3.3 程序开发总结 4 4 附件(源程序) 4 /*在后面的文档编写中,请你不要修改各个标题的内容 ,从而确保报告内容和风格一致。完成全部内容后,你 只需要在上面的目录上右键“更新域”,选择“只更新页码 ”就可以更新正确的目录页码。注意:目录的左边距为6 .5厘米。*/ 1 摘要 1.1 设计题目 西北工业大学学生通讯录 1.2 设计内容 本软件设计了一个学生通讯录,可以输入一个包括学号,姓名,系别,专业,籍贯,家庭住 址,联系电话的通讯录。用户不但可以输入,而且可以输出到屏幕查看,输出到磁盘保存 ,从磁盘调出; 也可以删除用户,根据姓名精确定位,或者根据系别,专业,籍贯进行批量查询,非常 实用。 1.3 开发工具 开发工具:VC6++ 1.4 应用平台 Windows 2000/XP/Vista 32位/WIN7/WIN8 2 详细设计 2.1 程序结构 为了明确程序关系,用框架图更加直观: [pic] 从上图可以看到,程序从main()开始,调用菜单程序int menu_select(),根据返回值,选择不同的分支,执行不同的函数。程序在调用函数的时候 ,一般将指针头指针同时发送,这样用户根据指针头部,可以将整个链表信息进行处理 。 从上图我们已经可以很清晰地看到函数之间的关系了,对它们的关系不再赘述。 有几个单独的函数应该在此说明一下, void stringinput(char *t,int lens,char *notice),这个函数每次需要输入字符串的时候都要调用,程序把字符串的大小定义好 ,然后传送给函数,如果超长,则提示错误,这样避免了每次输入字符串都要进行一次 原地判断的麻烦。 void display(Node *p) 这个函数在显示的时候需要调用,比如显示十次信息,则调用信息,传入的参数是当前 链表指针,他根据当前指针进行屏幕列印。 这样避免了在程序多个地方重复进行这个功能的麻烦。 其它函数表述如下: void append(link l) 输入参数是链表头指针,本函数找到链表尾添加信息。 void del(link l) 输入参数是链表当前的节点指针,本函数将当前记录删除。 void list(link l) 输入参数是链表头指针,本函数将全部记录列印到屏幕上。 void load(link l) 输入参数是链表头指针,本函数将磁盘文件导入链表。 int menu_select() 本函数显示菜单 void save(link l) 输入参数是链表头指针,本函数将链表信息拷入磁盘文件。 void search(link l) 输入参数是链表头指针,本函数根据姓名查找信息显示。 void search2(link l) 输入参数是链表头指针,本函数根据系别等信息遍历链表,将符合要求的记录列印到屏 幕。 2.2 主要功能 主程序main, 主程序里面先将通讯录链表的头产生,为追加记录或从磁盘导入文件做个基础.主程序里 面通过循环选择结构,产生一个菜单,用户可以选择菜单,进入不同的功能. 功能1 是输入记录,可以在现有的数据上追加记录。这个是先通过主程序把链表的头部指针传 送到append函数,然后系统将链表指针定位到最后,然后将信息写入,最后将最后一个链表 尾部的指针指向NULL. 功能2 是删除记录,系统先要求你要删除的人的姓名,输入姓名回车,删除该记录。系统从链 表的头部扫描,如果有名字相符的,将链表打断,将该记录的前一项的NEXT指针指向他的后 一项. 功能3 是浏览记录,就是把现有的记录进行浏览。系统从链表头部到尾部显示到屏幕上. 功能4 是名称查找,就是根据姓名精确定位,这个功能和下面的其它检索不同,它是直接找到 姓名匹配的,然后列出该记录就结束。系统从链表的头部开始扫描,发现该姓名的用户, 就停止,并且将该项目显示到屏幕上。 功能5 是磁盘保存,就是把文件保存到磁盘文件里面。文件名字是 adresslist; 这里首先要产生一个指向文件的指针,然后将其指向磁盘文件,如果不存在则建立新文 件。然后利用该文件指针将数据逐一写入磁盘。 功能6 是磁盘加载,就是从adresslist 这个文件中加载已经保存的文件。里首先要产生一个指向文件的指针,然后将其指向磁 盘文件,如果不存在则提示错误,如果存在,则利用该文件指针将数据逐一从磁盘写入 内存。 功能7 是其它检索,可以根据系别,专业,籍贯信息检索,它的特点是将所有符合条件的(比 如都是计算机系)的记录全部列出。 这里首先采用选择结构,1-系别检索 2-专业检索 3-籍贯检索 选择其中一个后,系统从链表头部开始扫描,凡是符合条件的,都显示在屏幕上。达到 检索的目的。 功能8 退出系统 2.3 函数实现 main函数 首先申请链表头,然后调用菜单显示程序menu_select,显示菜单,用分支语句 switch语句,并且用循环结构选择程序功能,直到输入0退出软件. menu_select 函数 主要是显示功能,将菜单显示出来. append 函数 先用循环语句遍历链表,然后找到链表尾部, 把信息输入, 将链表的尾部的 NEXT指针指向NUMM. Del函数 先输入名字,然后用循环语句遍历链表,找到这个节点后,将该节点删除,并且将链表重新 连接起来. List函数 用循环函数遍历链表,将链表的信息显示. Search函数 输入姓名,然后用循环语句遍历链表, 找到该名字,然后把其信息全部显示. save函数 先建立一个文件指针,设置写二进制模式,然后打开文件, 用循环语句将链表信息从头到尾写入文件. load函数先建立一个文件指针,设置读二进制模式,然后打开文件, 用循环语句将链表信息从头到尾读出, 同时建立链表, 将文件信息保存.. search2函数 2.4 开发日志 14年12月11日,开始构建程序基本框架,主要是先吧所有的需要的函数名字写出来(不 写具体代码)把程序构造好。 14年12月13日,基本构造好框架,主程序段和菜单项做好,其他的函数做出一个空的函 数结构。调试发生错误。 14年12月14日,修改错误。 14年12月15-16日 查找参考实例,应用到本软件,开始正式做函数,stringinput ,append , enter函数做完并调试成功。 14年12月17-19日 将其他函数做完并调试成功,但是发现一些问题. 14年12月20-22日 修正问题, 把有的感觉不太顺的地方修整好,程序调试完毕。 3 程序调试及运行 3.1 程序运行结果 程序菜单界面,在这里选择程序菜单项: [pic] 选择1的时候的输入界面: [pic] 选择2的时候的删除界面: [pic] 选择3的时候,列表记录: [pic] 选择4的时候的名称查找界面: [pic] 选择5的时候的运行界面: [pic] 选择6的时候的加载界面: [pic] 选择7,其它检索的时候出现的选项: [pic] 选择系别检索的时候的运行画面: [pic] 选择专业检索的时候运行画面 [pic] 选择籍贯检索时的运行画面: [pic] 3.2 程序使用说明 本程序可以从0开始输入建立一个通讯录,但是从调试程序的角度讲,最好是先把磁 盘文件导入,使用6:磁盘加载功能先将文件导入。这样有一组现成的数据可以使用。 功能1 是输入记录,可以在现有的数据上追加记录。 功能2 是删除记录,系统先要求你要删除的人的姓名,输入姓名回车,删除该记录。 功能3 是浏览记录,就是把现有的记录进行浏览。 功能4 是名称查找,就是根据姓名精确定位,这个功能和下面的其它检索不同,它是直接找到 姓名匹配的,然后列出该记录就结束。 功能5 是磁盘保存,就是把文件保存到磁盘文件里面。文件名字是 adresslist; 功能6 是磁盘加载,就是从adresslist 这个文件中加载已经保存的文件。 功能7 是其它检索,可以根据系别,专业,籍贯信息检索,它的特点是将所有符合条件的(比 如都是计算机系)的记录全部列出。 功能8 退出系统 请注意,每次运行一个功能,系统故意有个getch()这样给用户一个时间查看界面, 看完后按一下回车,返回菜单. 3.3 程序开发总结 人们都说,学计算机必须学C语言,学习C语言必须学好指针和数组, 这两个地方恰恰是C语言的难点,这个课题却恰好包含了这两个难点,在写这个软件过程 中,参考了无数的例题,开始的时候却总是似乎明白,又似乎不明白,做出的程序每次 编译会出几十个错误,真的是头痛。 慢慢地,经过一个一个的小练习,多看别人的程序,才慢慢入门,从一个一个功能块, 慢慢连接起来才变成一个完整的程序。 学习C语言,必须要多做,多看,只是看别人做的热闹是无论如何也不行的, 开始的时候,输入一个整数这么简单的问题,也多次出现错误,原因是没有加地址符, 而这个错误很难发现,编译也没有提示,经过很长时间才找到这个非常低级的错误。 再比如链表的指针,在进行链表删除操作中,要琢磨很长时间才能想明白这个指针的怎 么运行的,一直到今天,感觉指针依然经常令我感到棘手,这个问题看来到以后也要经 常复习,加深印象才行。 但是无论多么辛苦, C语言都是必须学好的,因为C语言在现在的每个大公司的招聘中,都是必不可少的,打 下好的C语言基础,对于我们未来的发展是最基本的要求! 4 附件(源程序) #include #include #include #include struct Info { char number[15]; char name[10]; char department[10]; char special[15]; char province[10]; char addr[10]; char tel[20]; }; typedef struct node/*定义通讯录链表的结点结构*/ { struct Info data; struct node *next; }Node,*link; //---------------------这里就是下面用的输入字符串-------- void stringinput(char *t,int lens,char *notice) { char n[20]; do{ printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens)printf("\n 大于规定长度!!! \n"); /*超过lens值重新输入*/ }while(strlen(n)>lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/ } //---------------------这里就是下面用的输入字符串-------- void append(link l) { Node *p,*q,*begin,*s; int w_counter=0; while(1) { begin=l; while(begin!=NULL)/*从首节点一直遍历到链表最后*/ { w_counter++; s=begin; begin=begin->next; } p=(Node*)malloc(sizeof(Node));/*申请结点空间*/ if(!p)/*未申请成功输出提示信息*/ { printf("内存分配失败\n"); return; } stringinput(p->data.number,5,"输入学号 0 退出:");/*输入学号*/ if(strcmp(p->data.number,"0")==0)/*检测输入的学号是否为0*/ break; stringinput(p->data.name,10,"输入姓名:");/*输入姓名*/ stringinput(p->data.department,10,"输入系名:");/*输入系*/ stringinput(p->data.special,10,"输入专业:");/*输入专业*/ stringinput(p->data.province,10,"输入籍贯:");/*输入电话号码*/ stringinput(p->data.addr,10,"输入地址:");/*输入电话号码*/ stringinput(p->data.tel,15,"输入电话号码:");/*输入电话号码*/ s->next =p; p->next =NULL; } } //---------------------这里就是下面用的输入字符串-------- void enter(link l)/*输入记录*/ { Node *p,*q,*begin; q=l; printf("本功能用于首次输入数据,如果要追加数据,请用追加功能\n"); while(1) { p=(Node*)malloc(sizeof(Node));/*申请结点空间*/ if(!p)/*未申请成功输出提示信息*/ { printf("内存分配失败\n"); return; } stringinput(p->data.number,15,"输入学号 0 退出:");/*输入学号*/ if(strcmp(p->data.number,"0")==0)/*检测输入的学号是否为0*/ break; stringinput(p->data.name,10,"输入姓名:");/*输入姓名*/ stringinput(p->data.department,10,"输入系名:");/*输入系*/ stringinput(p->data.special,15,"输入专业:");/*输入专业*/ stringinput(p->data.province,10,"输入籍贯:");/*输入电话号码*/ stringinput(p->data.addr,10,"输入地址:");/*输入电话号码*/ stringinput(p->data.tel,20,"输入电话号码:");/*输入电话号码*/ p->next=NULL; q->next=p; q=p; } } void del(link l) { Node *p,*q; char s[20]; q=l; p=q->next; printf("请输入删除姓名:"); scanf("%s",s);/*输入要删除的姓名*/ while(p) { if(strcmp(s,p->data.name)==0)/*查找记录中与输入名字匹配的记录*/ {q->next=p->next;/*删除p结点*/ free(p);/*将p结点空间释放*/ printf("删除成功!"); break; } else { q=p; p=q->next; } } getch(); } //--查看 void display(Node *p) { printf("%5s%10s%10s%10s%15s%10s%15s\n",p->data.number,p->data.name,p- >data.department,p->data.special,p->data.province,p->data.addr,p- >data.tel); } //--查看 //名称搜索 void search(link l) { char name[20]; Node *p; p=l->next; printf("输入要查找的名字:->"); scanf("%s",name);/*输入要查找的名字*/ while(p) {if(strcmp(p->data.name,name)==0)/*查找与输入的名字相匹配的记录*/ { display(p);/*调用函数显示信息*/ getch(); break; } else p=p->next; } } //其它搜索 void search2(link l) { char name[20]; char depar[10]; char spe[10]; char pro[10]; Node *p; p=l->next; int k; while(1) { printf("输入要查找的类别 1-系别 2.专业 3.籍贯:->"); scanf("%d",&k); if (1==k||2==k||3==k) {break;} } if (1==k) //系别查找的 { printf("输入要查找的系别:->"); scanf("%s",depar);/*输入要查找的名字*/ while(p!=NULL) {if(strcmp(p->data.department,depar)==0)/*查找与输入的名字相匹配的记录*/ { display(p);/*调用函数显示信息*/ } p=p->next; } getch(); }//系别查找的 if (2==k) //专业查找的 { printf("输入要查找的专业:->"); scanf("%s",spe);/*输入要查找的名字*/ while(p) {if(strcmp(p->data.special,spe)==0)/*查找与输入的名字相匹配的记录*/ { display(p);/*调用函数显示信息*/ } p=p->next; } getch(); }//专业查找的 if (3==k) //籍贯查找的 { printf("输入要查找的籍贯:->"); scanf("%s",pro);/*输入要查找的名字*/ while(p) {if(strcmp(p->data.province,pro)==0)/*查找与输入的名字相匹配的记录*/ { display(p);/*调用函数显示信息*/ } p=p->next; } getch(); }//籍贯查找的 return; } //显示列表的 void list(link l) { Node *p; p=l->next; while(p!=NULL)/*从首节点一直遍历到链表最后*/ { display(p); p=p->next; } getch(); } //显示列表的 void save(link l) { Node *p; FILE *fp; p=l->next; if((fp=fopen("adresslist","wb"))==NULL) { printf("无法打开文件\n"); exit(1); } printf("\n保存文件成功,位于本目录 adresslist.dat\n"); while(p)/*将节点内容逐个写入磁盘文件中*/ { fwrite(p,sizeof(Node),1,fp); p=p->next; } fclose(fp); getch(); } //从磁盘导入 void load(link l) { Node *p,*r; FILE *fp; l->next=NULL; r=l; if((fp=fopen("adresslist","rb"))==NULL) { printf("无法打开文件\n"); exit(1); }; printf("\n加载文件成功,来自 文件 adresslist.dat\n"); while(!feof(fp)) { p=(Node*)malloc(sizeof(Node));/*申请节点空间*/ if(!p) { printf("申请空间失败!!!"); return; } if(fread(p,sizeof(Node),1,fp)!=1)/*读记录到节点p中*/ break; else { p->next=NULL; r->next=p;/*插入链表中*/ r=p; } } fclose(fp); getch(); } int menu_select() { int i; printf("\n\n\*******************西北工业大学通讯录************************\n "); printf(" 1.输入记录 \n"); printf(" 2.删除记录 \n"); printf(" 3.列出记录 \n"); printf(" 4.姓名查找 \n"); printf(" 5.磁盘保存 \n"); printf(" 6.磁盘加载 \n"); printf(" 7.其它检索 \n"); printf(" 8.退出程序 \n"); printf(" *************************************************************\n"); do { printf("\n\t请输入你的选择:"); scanf("%d",&i); }while(i<0||i>8); return i; } int main() { link l; l=(Node*)malloc(sizeof(Node)); if(!l) { printf("\n 内存申请失败 "); /*如没有申请到,输出提示信息*/ return 0; /*返回主界面*/ } l->next=NULL; system("cls"); while(1) { system("cls"); switch(menu_select()) { case 1: append(l);//enter(l); break; case 2: del(l); break; case 3: list(l); break; case 4: search(l); break; case 5: save(l); break; case 6: load(l); break; case 7: search2(l); break; case 8: return 0; } } return 0; } C程序设计之MFC大作业 |班级 |11021302 |学号 |2013302735 |姓名 |蔡建文 | |一、需求分析 | |我们通常都需要设置一个备忘录,来记录我们即将要处理的事情。该系统要求以文本文件存储事件信息,对文| |件中的内容读入内存进行各种操作。 | |二、总体设计 | |希望该记事本能够实现以下功能:1.添加事件 2.查询事件 3.修改事件 4.删除事件 5.显示事件 | |6.退出事件 7.保存事件 8.读取事件。 | |通过对这些功能的应用,完成日常事件的处理。 | |三、模块详细设计 | |(1)记事功能:可在界面中方便地输入待办事宜,如果当天已有安排,程序应有相关的提醒。可以改变事件处 | |理的时间或者对事件优先级进行编辑,当需要插入处理的事件时,后续的事件优先级要有所改变,如原来有优| |先级为1,2的两件事件,当在中间插入一新的事件时,原来优先级为2的事件的优先级就变为3 | |(2)能删除或修改已有记录。 | |(3)查询功能:可根据时间查询当日事宜。 | |(4)显示功能:显示全部或部分事件安排。 | |(5)界面友好,可操作性强,设计一个菜单让用户选择管理功能,利用循环结构使得一次运行程序可对多项管 | |理。 | | | |四、实验中遇到的问题及解决方法: | |1,部分函数运用不够熟练,需要时不知道该用哪个函数,通过不断地查阅、记忆,渐渐掌握了对这些函数的 | |应用。 | |2,刚开始未能在外生成存储信息的文件,询问高手得以解决。 | |3,刚开始查询事件是很不准确,后来增加了查询的分类,并增加了事件的关键项,使得查询非常方便。 | | | | | |六、实验中所涉及的知识及技术 | |1,C++编程语言的熟练运用。 | |2,记事本记事功能的基本思路。 | | | | | | | | | | | | | |七、实验中的创新及功能扩充: | |1,通过对事件的详细分类,增加了查询的方便性。 | |2,可以通过与其他事件的比较,改变本事件的重要指数。 | |八、收获与体会 | |在写这个软件过程中,参考了无数的例题,开始的时候却总是似乎明白,又似乎不明白,做出的程序每次编译| |会出几十个错误,真的是头痛。 慢慢地,经过一个一个的小练习,多看别人的程序,才慢慢入门,从一个一 | |个功能块,慢慢连接起来才变成一个完整的程序。 | | | |九、程序运行说明 | | | |功能1 是输入事件,可以在现有的数据上追加事件。 | |功能2 是查询事件,系统先要求你要先输入查询事件的日期和优先级,然后回车,查询该事件。 | |功能3 是修改事件,就是把现有的事件进行修改。 | |功能4 是删除事件,系统先要求你要先输入删除事件的日期和优先级,然后回车,删除该事件。 | |功能5 是显示事件,就是把所有的时间列表显示出来。 | |功能6 是退出程序。 | |功能7 是保存事件,把所有事件保存起来。 | |功能8 是读取事件。 | | | |下面是程序运行结果 | |程序菜单界面,在这里选择程序菜单项: [pic] | |选择1的时候的输入界面: | | | |[pic] | |选择2的时候的查询界面: | |[pic] | | | |选择3时的修改界面: | | | |[pic] | |选择4的时候的删除界面: | |[pic] | | | |选择5的时候的显示界面: | |[pic] | |选择6的时候退出程序; | |选择7的时候的保存界面: | |[pic] | |选择8时的读取界面: | |[pic] | |源代码:#include | |#include | |#include | |#define N 100 | |struct date /* 日期结构 */ | |{ int year; /* 年 */ | |int month; /* 月 */ | |int day; /* 日 */ | |}; | |struct event /* 事件信息结构 */ | |{ char describe[20]; /* 事件简要说明 */ | |struct date eventdate; /* 事件处理日期 */ | |int level; /* 事件优先级,表示事件处理的顺序 */ | |int flag; /*事件处理状态0/1/2表示未处理/已处理/暂缓处理 */ | |} stud[N]; /* 结构体数组 */ | |int nSize; | |void printsi() | |{ | |if(nSize==0) | |{ | |printf("事件列表为空!\n"); | |return; | |} | |for(int i=0;i
更多简介内容

推荐帖子

评论

登录/注册

意见反馈

求资源

回顶部

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })
×