映射表模拟程序c语言课程设计.doc_第1页
映射表模拟程序c语言课程设计.doc_第2页
映射表模拟程序c语言课程设计.doc_第3页
映射表模拟程序c语言课程设计.doc_第4页
映射表模拟程序c语言课程设计.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南昌航空大学软件学院课程设计学 号:_班 级:_姓 名:_指导老师:_2013年9月13日南昌航空大学软件学院课程设计任务书学院:软件学院 班级:122041班 姓名:胡凯学号:12204118 指导老师:梁旗军设计日期:2013.9.32013.9.13(1) 课程设计题目映射表模拟程序(2) 课程设计目的和要求 模拟计算机中映射表程序的运行过程。存入数据 取出数据 清空映射表 统计映射表中数据个数 取出映射表的key数组 取出映射表的value数组 查询key 对应的value 判断某个元素是否存在 记录操作日志(3) 待实现的方法(基本)方法名称方法声明方法作用创建映射表create()初始化系统相关变量存入数据void put(int key, char*)存入一对元素取出数据char* get(int key)根据key取出value元素映射表长度int size()得到映射表中元素个数key是否存在int exist(int key)判断某个key是否存在,存在返回1,否则返加0value是否存在int exist(char* value)如果存在同样值的value,返回1,否则返回0清空映射表void clear()清空映射表中所有元素判断为空int empty()判断映射表是否为空取出key数组int* keySet()返回映射表中所有key的数组取出value数组char* valueSet() 返回映射表中所有value的数组打印所有元素void print_all()打印映射表中所有元素记录操作日志void info(char* filename)将每次用户的操作信息写到日志文件filename中屏幕显示(主菜单)主函数目录一、需求分析. .1二、程序流程图 . . 2三、核心技术的实现说明及相应程序段. . . 6四、课设总结. . . 11 五、参考文献. . 12 六、源程序. . 12一:需求分析 经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,其中每一个模块对应一个函数,它们的功能分别是:存入数据,取出数据,清空映射表,统计映射表中数据个数,取出映射表的key数组,取出映射表的value数组,判断当前表现是否为空,判断某个元素是否存在,打印所有元素。 1. 存入数据主要实现程序最初运行时课程数据的录入功能,包括整形值key和映射的值value,并且实现一一对应。2.取出数据对存入的数据进行取出,根据输入的key进行对value的提取。3. 清空映射表对程序中的key和value进行清空处理,方法可用超越key的整形上限为主,value可以数组清零实现。4.统计映射表中数据个数对程序中现有的已经存入的key进行统计。5. 取出映射表的key数组对存入的key进行读取打印,如果key没有,判断key为空。6.取出映射表的value数组对存入的value进行读取打印,如果value没有,判断value为空。7.判断当前表现是否为空对key的值进行查看,是否为空。8.判断某个元素是否存在输入要查找的key值,找到对应的key。9.打印所有元素对输入的映射数据进行打印,排除整齐的队形。每一个映射key都有对应的value值,在程序当中,将数据记录类型定义为结构体类型,直接写入shuju.txt文件中,同时每步的过程都写入shuju.txt文件中。包括每步的时间,操作了什么都一一写入之中,这样可以方便查看对应的操作过程。完美的模拟映射程序。二:流程图菜 单取出数据开 始清空映射表统计映射表中数据个数取出映射表的key数组取出映射表的value数组 判断当前表现是否为空判断某个元素是否存在定义key值判断函数输入key值对key与value的值进行处理对宏定义的值读取定义key-temp的指针定义char型value_temp数组判断length是否为零YN定义keyexist与valueexi函数1.系统流程图菜单结 束打印key与value数组打印当前key数组Key的值超越上限Value值进行归零请输入key值与value值,把key与value保存到结构体中,并输出到文档shuju.txt中打印所有元素退出系统定义整形key与字符串value存入数据输入key值或value值打印不为空打印不为空打印当前key数组打印出length的值是否存在key输入value值1.key2.valueNYKey的值超越上限Value值进行归零输出value值没有该key!2Value值为空1是否继续输入?y/nY输入key值菜单YKey值空NN该value不存在Y打印key值该key不存在菜单打印value值三、核心技术的实现说明及相应程序段本程序主要由10个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加数据函数、记录操作日志程序较为核心的部分,下面分别进行说明。1、 添加数据函数(1)首先定义一个头文件与结构体#include struct mapint key;char value10;mapinfoN;(2)映射表映射为一一映射的关系,要实现一一对应可以理解为一组组的存取,使用一个结构体分别对key与value进行定义,存入的key与value通过指针进行传递,传递到结构体中,进行保存操作。具体如下:void creat()length=0;void put()int key_temp;char value_temp10=0;while(1)printf(rn请输入key:);scanf(%d,&key_temp);/*接收key值*/fprintf(f, key: %d,key_temp);printf(rn请输入value:);scanf(%s,value_temp);fprintf(f, value: %d,value_temp);mapinfolength.key=key_temp;/*把key存入结构体中*/strcpy(mapinfolength.value,value_temp);/*把输入的value值复制到结构体中*/length+;/*记录个数*/getchar();printf(是否继续输入?y/n);/*判断是否停止输入*/if(getchar()=n)break;2、记录操作日志操作日志可以记录到操作过程中是什么时间进行操作的,输入了什么数据,输出了什么数据,提取了什么数据,要实现这个功能具体如下:(1)使用一个#include的头文件,然后对时间进行定义time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );fprintf(f,n%4d-%02d-%02d %02d:%02d:%02d ,1900+timeinfo-tm_year,1+timeinfo-tm_mon,timeinfo-tm_mday,timeinfo-tm_hour,timeinfo-tm_min,timeinfo-tm_sec);(2)过程的记录1.定义一个指针FILE *f;建立文本shuju.txt,并在程序运行时打开并允许写入f=fopen(shuju.txt,w);2.对菜单的记录switch(choice)case 1: fprintf(f,rn存入数据:);break;/*对菜单第一项进行记录*/case 2: fprintf(f,rn取出数据:);break; /*对菜单第二项进行记录*/case 3: fprintf(f,rn清空映射表);break; /*对菜单第三项进行记录*/case 4: fprintf(f,rn统计映射表中数据个数);break; /*对菜单第四项进行记录*/case 5: fprintf(f,rn取出映射表的key数组);break; /*对菜单第五项进行记录*/case 6: fprintf(f,rn取出映射表的value数组);break; /*对菜单第六项进行记录*/case 7: fprintf(f,rn判断当前表现是否为空);break; /*对菜单第七项进行记录*/case 8: fprintf(f,rn判断某个元素是否存在);break; /*对菜单第八项进行记录*/case 9: fprintf(f,rn打印所有元素);break; /*对菜单第九项进行记录*/case 10: fprintf(f,rn退出系统);break; /*对菜单第十项进行记录*/3.对每个菜单的各个细节进行记录fprintf(f, key: %d,key_temp);/*对输入的key值进行记录,不进行存储操作,直接存入,优点:方便,缺点:需要执行多次*/fprintf(f, value: %d,value_temp); /*对输入的value值进行记录,不进行存储操作,直接存入,优点:方便,缺点:需要执行多次*/fprintf(f, key: %d,key_temp);/*对要寻找的key进行记录*/fprintf(f, 映射表已经清空!);/*对判断映射表是否清空进行记录*/fprintf(f, 当前映射表中的元素个数是:%d个,length);/*对元素个数的记录*/fprintf(f, 当前key数组是:);/*对key的数组操作项目进行记录*/fprintf(f,%d ,key_tempi); /*对key的数组进行记录,跟随for循环*/fprintf(f, 当前value数组是:); /*对value的数组操作项目进行记录*/fprintf(f,%s ,value_tempi); /*对value的数组进行记录,跟随for循环*/fprintf(f, 当前映射表不为空!); fprintf(f, 当前映射表为空!);/*对映射表是否为空进行记录*/1.当查找映射值为key时fprintf(f, key:%d,temp_key);/*对输入的key值进行记录*/fprintf(f, 该key存在!); fprintf(f, 该key不存在!);/*对key值是否存在进行记录*/2.当查找映射值为value时fprintf(f, value:%s,temp_value); /*对输入的value值进行记录*/fprintf(f, 该value存在!); fprintf(f, 该value不存在!); /*对value值是否存在进行记录*/fprintf(f,rn %d-%s,mapinfoi.key,mapinfoi.value);/*对打印出的全部key与value的映射值进行记录*/四:课设总结在拿到题目时,对映射不是很理解,经过老师讲解后明白一一映射的关系,开始做事,遇见了非常多的技术性难题,比如输入方面,怎么实现一组组的输入,怎么使用菜单进行函数的调用,怎么使数据输入到文本当中等等,包括未学的数据结构,都是非常大的难题,在查询资料后,只能靠类似点的进行理解参考,问题一步步的解决,通过这次课设,很大的提高了自学的能力,明白了很多函数的用法,对于 c 程序的理解又深入了一步,非常具有挑战性,实现了对课程的基本完美实现。五、参考文献谭浩强C程序设计北京:清华大学出版社,2005六、源程序#include #include #include #define N 100struct mapint key;char value10;mapinfoN;int length;FILE *f;void menu()printf(n);printf(n);printf(tt n);printf(tt 欢迎使用映射表模拟程序 n);printf(tt n);printf(ntt 1 存入数据 n);printf(tt 2 取出数据 n);printf(tt 3 清空映射表 n);printf(tt 4 统计映射表中数据个数 n);printf(tt 5 取出映射表的key数组 n);printf(tt 6 取出映射表的value数组 n);printf(tt 7 判断当前表现是否为空 n);printf(tt 8 判断某个元素是否存在 n);printf(tt 9 打印所有元素 n);printf(tt 10 退出系统 n);void creat()length=0;void put()int key_temp;char value_temp10=0;while(1)printf(rn请输入key:);scanf(%d,&key_temp);fprintf(f, key: %d,key_temp);printf(rn请输入value:);scanf(%s,value_temp);fprintf(f, value: %d,value_temp);mapinfolength.key=key_temp;strcpy(mapinfolength.value,value_temp);length+;getchar();printf(是否继续输入?y/n);if(getchar()=n)break;char *get(int key)int i;for(i=0;ilength;i+)if(key=mapinfoi.key)return mapinfoi.value;return NULL;void getvalue()int key_temp;char *p;printf(rn请输入key:);scanf(%d,&key_temp);fprintf(f, key: %d,key_temp);p=get(key_temp);if(NULL=p)printf(rn没有该key!);fprintf(f, 没有该key!);elseprintf(rn value:%s,p);fprintf(f, value:%s,p);void clear()int i;for(i=0;iN;i+)mapinfoi.key=65536;mapinfoi.value0=0;length=0;printf(rn映射表已经清空!);fprintf(f, 映射表已经清空!);void size()printf(rn当前映射表中的元素个数是:%d个,length);fprintf(f, 当前映射表中的元素个数是:%d个,length);int* keySet()int i,key_tempN;for(i=0;ilength;i+)key_tempi=mapinfoi.key;return key_temp;void keylist()int i,*key_temp;printf(rn当前key数组是:);fprintf(f, 当前key数组是:);key_temp=keySet();for(i=0;ilength;i+)printf(%d ,key_tempi);fprintf(f,%d ,key_tempi);void valuelist()int i;char value_tempN10;printf(rn当前value数组是:);fprintf(f, 当前value数组是:);for(i=0;ilength;i+)strcpy(value_tempi,mapinfoi.value);printf(%s ,value_tempi);fprintf(f,%s ,value_tempi);int empty()if(length=0)return 0;elsereturn 1;void isempty()if(empty()printf(rn当前映射表不为空!);fprintf(f, 当前映射表不为空!);elseprintf(rn当前映射表为空!);fprintf(f, 当前映射表为空!);int keyexist(int key)int i;for(i=0;ilength;i+)if(key=mapinfoi.key)return 1;return 0;int valueexist(char* value)int i;for(i=0;ilength;i+)if(!strcmp(value,mapinfoi.value)return 1;return 0;void isexist()int choice,temp_key;char temp_value10;printf(rn请选择查找key or value n 1. keyn2. value);scanf(%d,&choice);if(choice=1)printf(rn请输入key:);scanf(%d,&temp_key);fprintf(f, key:%d,temp_key);if(keyexist(temp_key)printf(rn该key存在!);fprintf(f, 该key存在!);elseprintf(rn该key不存在!);fprintf(f, 该key不存在!);if(choice=2)printf(rn请输入value:);scanf(%s,&temp_value);fprintf(f, value:%s,temp_value);if(valueexist(temp_value)printf(rn该value存在!);fprintf(f, 该value存在!);elseprintf(rn该value不存在!);fprintf(f, 该value不存在!);void print_all()int i;printf(rn key-value);fprintf(f,rn key-value);for(i=0;itm_year, 1+timeinfo-tm_mon,timeinfo-tm_m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论