数据结构(C++版)课设.doc_第1页
数据结构(C++版)课设.doc_第2页
数据结构(C++版)课设.doc_第3页
数据结构(C++版)课设.doc_第4页
数据结构(C++版)课设.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

存档资料 成绩: 华东交通大学理工学院课 程 设 计 报 告 书课程名称 数据结构(C+版) 题 目 班级考试查询系统 分 院 电气与信息工程分院 专业班级 计算机科学与技术(一班) 学号 20080210440122 学生姓名 * * * 指导教师 * * 2010年 7 月 16日 华东交通大学理工学院课 程 设 计( 论 文 )任 务 书专 业 计算机科学与技术 班 级 1班 姓 名 * * 一、课程设计(论文)题目 班级考试查询系统 二、课程设计(论文)工作:自 2010 年 6 月 28 日起至 2010 年 7 月 16 日止。三、课程设计(论文)的内容要求:1) 设每个记录有下列数据项:考生学号、考生姓名、考试考号;2) 从键盘输入各记录,分别以考生学号和考生姓名为关键字建立散列表;3) 采用一定的方法解决冲突;4) 查找并显示给定考生学号的记录;5) 查找并显示给定考生姓名的记录;学生签名: 2010 年7 月13 日课程设计(论文)评阅意见序号项 目等级优秀良好中等及格不及格1课程设计态度评价2出勤情况评价3任务难度评价4工作量饱满评价5任务难度评价6设计中创新性评价7论文书写规范化评价8综合应用能力评价综合评定等级 评阅人 职称 20 年 月 日目录第1章 课程设计任务书.2第2章 程序设计目的.5第3章 程序实现思路.5第4章 程序清单.14第5章 课程设计心得.23第6章 参考文献.24第2章 程序设计目的1. 熟悉使用c+环境,将数据结构课程中学到的基本知识和基本技能,运用于实际的应用软件系统中。2.学习掌握班级考生查询系统的基本原理,掌握数据结构在现实中的应用 3.利用数据结构做一些基本的小软件和微型系统4.掌握、理解数据结构,并有助于在实际编程过程中应用,锻炼算法书写、上机实习规范、程序调试技巧、设计说明书的整理。 第3章程序实现思路1班级考生查询系统的模块连接结构如下图:班级考生查询系统 主程序模块 载入模块删除模块保存模块 查找模块插入模块 输出模块输入模块2 模块功能说明对本系统的功能进行分析后可作如下的模块化设计:输入模块实现功能:按顺序将考生学号、考生姓名、考生考号依次输入,并建立链表将其连接。当输入的货品编号为0时,输入结束。插入模块实现功能:向已经存盘的文件中再输入考生的信息,包括考生学号、考生姓名称、考生考号等等。删除模块实现功能:在已经存储的文件中删除指定的考生信息,并释放内存空间。删除可以按照考生学号和考生姓名两中方法进行。查找模块实现功能:在已经存储的文件中查找指定的考生信息。可以按照查找考生学号和考生姓名两种方法进行。输出模块实现功能:在输入特定的文件名之后,输出该文件中所包含的全部考生信息。保存模块实现功能:进行上述操作后,都要进行保存操作,链表中的信息以文件形式被长期。保存。载入模块实现功能:将磁盘上的数据文件载入链表。主序模块实现功能:完成系统的界面处理,包括开始界面和主菜单界面。3、详细数据设计(1)数据结构的选择选取动态数据结构,本系统是通过双向链表来完成的。动态存储分配与释放: 申请存储空间函数malloc( )函数首部原型为void * malloc(unsigned int size) 释放存储空间函数free( )函数首部原型为void free(void*p)动态数据结构双向链表head 2030 2036 2025 20422030head2030 20362025D NULL C 2042B 2025A2036(2) 数据类型的选择struct commodity /*定义双向链表结构体*/int number; /*考生编号*/ char namemax; /*考生名称*/ int counter; /*考生数量*/ struct commodity *piror, *next; /*定义两指针,分别指向其前驱和后继*/;(3)变量函数说明:COM *input( )操作结果:输入考生信息COM *insert_perf( )操作结果:插入某考生COM *del_perf( )操作结果:删除某考生serch( )操作结果:查找某考生print_perf( )操作结果:输出某考生save(COM*head)操作结果:保存COM *openfile( )操作结果:载入4.流程框图查找模块和载入模块的算法框图在此略。开始(1)输入模块NULL=ptr1ptr1!=NULL将ptr1指向结点输入考生的信息申请一个结点空间,使ptr1指向它ptr1-num!=0NY NY是否为第一个数据(n=0)NPtr1=ptr2-next;ptr2=ptr1-prior Yptr1=headn+1=n, ptr1=ptr2NULL=ptr2-next 返回head结束 开始(2)插入模块调入载入模块Head=NULL“yes”or “no” Head=ptr1ptr3=ptr2-next;ptr2=ptr3-priorNULL=ptr3-nextptr1=ptr2;ptr1-next=ptr1ptr2=ptr1-priorptr1!=NULL申请一个结点空间,使ptr3指向它给ptr3指向结点输入预插入考生的信息YNY返回NULLNY返回head结束开始(3)删除模块调用载入模块head= =NULL Y N从键盘读入sel值Sel!=1且sel!=2 Y 1 2输入预删除的考生学号num输入预删除的考生学号namehead=ptr1ptr1-num= =num orptr1-name= =name Y Nptr1!=NULL且未找到要删除项Ptr1-next=head N返回NULL Yptr1=ptr2ptr1-next=ptr2-nextptr2=ptr1-priorPtr1-num= =num orPtr1-name= =nameY N Yptr1-next=ptr2-nextptr1-prior=ptr1-next-prior未找到“yes” OR “no” Y N返回head结束开始(4)保存模块输入预保存文件的文件名创建文件成功 N YHead=ptr1Ptr1!=NULL N Y将ptr1指向结点的数据写入文件Ptr1-next=ptr1结束开始(5)输出模块调用载入模块Head= =NULL Y NHead=ptr1输出ptr1指向结点的考生信息Ptr1-next=ptr1Ptr1!=NULL Y N结束对以上各模块的文字解释说明:(1)输入模块:其实就是一个建立链表的操作模块。建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。首先设三个指针变量:head,ptr1,ptr2。它们都是指向结构体类型数据的。先使head的值为NULL,这是链表为空的情况。用malloc函数开辟一个结点,并使ptr1,ptr2都指向它,之后从键盘读入一个考生的数据给ptr1所指向的结点。当输入的ptr1-num不为0时,令headptr1;ptr2=ptr1,即把ptr1的值赋给head,使ptr2,ptr1,head都指向这一新开辟的结点,此结点就成为链表中的第一个结点。再开辟一个新结点并使ptr1指向它,读入该结点的数据,如果输入的ptr1-num不为0,则应链入这第二个结点,这时和上一个结点的处理不同,是将ptr1的值赋给ptr2-next,也就是使第一个结点的next成员指向第二个结点,接着将ptr2也指向结点2。再开辟一个新结点并使ptr1指向它,读入该结点的数据,同样将ptr1的值赋给ptr2-next,也就是使第三个结点链接到第二个结点之后,并接着将ptr1的值赋给ptr2,使ptr2指向结点3。再开辟一个新结点,并使ptr1指向它,输入该结点的数据,如果输入ptr1-num为0,则是输入结束标志,此结点不被链接到链表中,就将NULL赋给ptr2-next。建立链表过程至此结束,ptr1最后所指结点并未链入链表中。(2)插入模块:要完成的是链表的插入操作,即将一个新结点插入到一个已有的链表中,对刚刚建立的链表,首先新设一个指针变量ptr0,并开辟一个结点使ptr3指向它,输入该结点的数据,即新货的有关数据,接下来查找要插入位置结点,找到后只需修改此结点和ptr0指向结点指针域的值即可,链表中所有元素位置均不需移动,这就体现了链表的优点。(3)删除模块:要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。使之指向被删除结点的后面一个结点即可。(4)保存模块:将最终想要保留的数据信息保存于文件中。(5)输出模块:要完成的是依次输出链表中各结点的数据的操作。首先找到链表头结点的地址,也就是head的值,然后设一个指针变量ptr1,先指向第一个结点,输出ptr1所指的结点,然后使ptr1后移一个结点,再输入直至链表的尾结点结束。第4章程序清单或正文#include /*标准输入/输出头文件*/#include /*包含字符串处理函数头文件*/#include /*包含动态存储与释放函数头文件*/#include#define LEN sizeof(COM)#define CHECK_COUNT ptr1-count#define CHECK_COUNT2 ptr3-counttypedef struct com long int num; char name10; int count; COM; /*定义结构体*/class Seqlistprivate:dataType *prior,*next;public: void input(); / 输入int search(); /查找void create(); /创建 bool insert(int i,int k); /插入void output(); /输出void save(); /保存 void openfile(); /载入链表 void delet();void Seqlist:input( )char string1 =number; char string2 =name; char string3 =count; int n=1; if(ptr1=(COM*)malloc(LEN)=NULL) /*申请空间函数*/ coutNo enough memory,fail to creat linklist!; getch( ); /*无回显的从键盘读取任意一个字符*/ clrscr( ); coutPlease input depend on the emply(studentsnumber=0 over):n; do cout%ld,&ptr1-num;flushall(); if(ptr1-num=0) coutPlease press any key to back to last Menu:; getch( ); free(ptr1); return(0); coutptr1-name; flushall( ); /*刷新缓冲区函数*/ coutptr1-count; flushall( ); if(CHECK_COUNT) coutnum!=NULL) if(n=1) head=ptr1; else ptr2-next=ptr1; ptr1-prior=ptr2; n=n+1; ptr2=ptr1; if(ptr1=(COM* )malloc(LEN)=NULL) coutNo enough memory,fail to creat linklist!; getch( ); do coutptr1-num; flushall( ); if(ptr1-num=0) ptr1-num=NULL; break; coutptr1-name; flushall( ); coutptr1-count; flushall( ); if(CHECK_COUNT) coutnext=NULL; coutFinish the inputting of goodsmessage,press any key to back to last Menu,please save:; getch(); return(head);bool Seqlist:insert( ) /*插入模块*/ COM * ptr3; char string1 =studentnumber; char string2 =studentname; char string3 =studentcount; char judge10; clrscr( ); coutPlease input inserted studentfliename:; head=openfile( ); f(head=NULL) return(NULL); else do clrscr( ); coutPlease input inserted studentgoodsmessage:n; if(ptr3=(COM*)malloc(LEN)=NULL) coutNo enough memory,fail to creat node!; getch(); do cout0):n,string1);cinptr3-num; flushall( ); if(ptr3-num=0) coutError inputting!please choose the inserted student againn; getch( );return; coutptr3-name;flushall( ); coutptr3-count; flushall( ); if(CHECK_COUNT2) cout0)!n; while(CHECK_COUNT2); ptr1=head; while(ptr1!=NULL) ptr2=ptr1; ptr1=ptr1-next; ptr1-prior=ptr2; ptr2-next=ptr3;ptr3-prior=ptr2; ptr3-next=NULL; coutjudge; clrscr( ); while(! strcmp(judge,yes); coutInserting success!n;coutPress any key to back to last Menun; coutAnd make sure to Save(6) them or you will lose them!n; getch( ); return(head);void Seqlist:delet( ) /*删除模块*/ char name10;char judgeint sel;int del_num; clrscr( ); coutPlease input delected studentfliename:; head=openfile( ); clrscr( ); if(head=NULL) return(NULL); else do do clrscr( ); coutPlease input delected studentmessage:; cout *1.Del depend on studentnumbern; cout *2.Del depend on studentnamen; coutsel; switch(sel) case 1:clrscr( ); coutdel_num; break; case 2:clrscr( ); coutname; break; while(sel!=1&sel!=2); ptr1=head; if(ptr1-num=del_num|(strcmp(ptr1-name,name)=0) head=ptr1-next; coutnum!=del_num&strcmp(ptr1-name,name)!=0) ptr2=ptr1; ptr1=ptr1-next;ptr1-prior=ptr2; if(ptr1-num=del_num|(strcmp(ptr1-name,name)=0) ptr2-next=ptr1-next; ptr1-next-prior=ptr1-prior; free(ptr1); coutnSuccess to delect studentmessage!nn; else coutnCant find this studentmessage!nn; coutjudge; while(!strcmp(judge,yes); clrscr( ); coutDelecting success!n; coutPress any key to back to last Menun; coutAnd make sure to Save(6) them or you will lose them!n; getch( ); return(head);void Seqlist:search( ) /*查找模块*/char name10; char judge10; int sel; long int sel_num; clrscr( ); coutPlease press searched studentfliename:; head=openfile( ); if(head=NULL) return; else do do clrscr( ) coutPlease choose the way to search:; cout *1.Search depend on studentnumbern; cout *1.Search depend on studentnamen; coutsel; switch(sel) case 1:clrscr( ); coutsel_num; break; case 2:clrscr( ); coutname; break; while(sel!=1&sel!=2); ptr1=head; while(ptr1!=NULL&ptr1-num!=sel_num&strcmp(ptr1-name,name)!=0) ptr1=ptr1-next; if (ptr1-num=sel_num)|(strcmp(ptr1-name,name)=0) coutn Success to search studentmessage!n; coutstudentnumber studentname studentcountnn; coutPRINT; else coutnCant find this studentmessage!nn; coutjudge; while(!strcmp(judge,yes); coutPlease press any key to back to last Menu:; getch( );void Seqlist:output( ) /*输出模块*/ int i=1; clrscr( ) coutPlease input printed studentfilename:; head=openfile( ); if(head=NULL) return; else clrscr( ); cout The printed result as follows:n; coutstudentnumber studentname studentcountnn; ptr1=head; do coutnext; if(i/10=1) /*超过十行换页*/ i=0; coutPress any key to change page:; getch( ); clrscr( ); coutstudentnumber studentname studentcountnn; i=i+1; while(ptr1!=NULL); coutPlease press any key to back to last Menu:; getch( ); void Seqlist:save(COM *head) /*保存模块*/ clrscr(); coutfilename1; if(fp=fopen(strcat(filename1,filename2),wb)=NULL) /*以二进制只写方式打开一个流*/ coutFail to creat FILE!; getch( ); return; ptr1=ptr2=head; while(ptr1!=NULL) if(fwrite(ptr1,sizeof(COM),1,fp)!=1) coutnext; fclose(fp); coutfilename1; if(fp=fopen(strcat(filename1,filename2),rb)=NULL) coutThis filename isnt exist,please check if exist.npress any key back to Menu; getch( ); return(NULL); if(ptr1=ptr2=(COM*)malloc(LEN)=NULL) coutNo enough memory,fail to creat linklist!nPlease press any key back to Menun; getch( ); return(NULL); if(fread(ptr1,sizeof(COM),1,fp)!=1) /*从fp指向的流中读取1个字段,每个字段为COM的字符长,并把它们放到ptr1指向的字符数组中,文件的位置指示器随着所读取的字符数而下移*/ coutnext=NULL) head=ptr1; else do if(n=1) head=ptr1; else ptr2-next=ptr1; n=n+1; ptr2=ptr1; if(ptr1=(COM*)malloc(LEN)=NULL) coutNo enough memory,fail to creat linklist!nPlease press any key to back to Menun; getch( );return(NULL); if(fread(ptr1,sizeof(COM),1,fp)!=1) coutnext!=NULL); ptr2-next=ptr1; return(head);fclose(fp); /*关闭文件函数*/void main( )char message = -*The instruction of GOODS SYSTEM*- nn You can input many kinds of messages,and you can use n studentname as kaoshenghao n This SYSTEM can do operation like insert or delect to the n goodsmessage that have saved,then saved again.while you n can search message depend on the studentnub or studentname. nnn -*Welcome to enter the STUDENT SYSTEM!*- n ;char menu = *MENU* nnn *1.Input n *2.Output n *3.Insert n *4.Delete n *5.Search n *6.Save n *0.Exit n ;int sel;delay(10);textbackground(LIGHTGRAY);textcolor(BLUE); /*背景为银灰色,字为蓝色*/clrscr( );coutmessage;cout Please press any key into the Menu!;getch( );do clrscr( );coutmenu;coutsel;switch(sel)case 1:head=input( ); /*输入模块*/ break; case 2:print( )

温馨提示

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

评论

0/150

提交评论