华中科技大学电子科学与技术系.doc_第1页
华中科技大学电子科学与技术系.doc_第2页
华中科技大学电子科学与技术系.doc_第3页
华中科技大学电子科学与技术系.doc_第4页
华中科技大学电子科学与技术系.doc_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

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

文档简介

华中科技大学电子科学与技术系课程设计报告名 称: 软件课程设计 题 目: 学生成绩管理系统 院 系: 电子科学与技术系 班 级: 电子科学与技术0606 日期: 2008 年 6月 30日目 录一、 程序功能说明页码1. 主功能说明2. 辅助功能说明3. 程序模块说明4. 界面说明二、 总体算法设计页码1. 数据存储文件结构2. 源代码文件结构三、 详细设计页码函数说明及程序流程四、 源程序清单.页码(由于源代码有1700多行,不便在报告中全部列出,因此只列出了核心功能函数的源代码)五、测试结果 .页码六、实践体会 .页码一程序功能说明本程序可以实现以下功能1.主功能:1.登录认证和密码修改2. 自动读取和存储数据3. 添加,删除,修改学生信息4. 添加,删除,修改科目信息5. 添加,删除,修改分数信息6. 多重搜索(学生姓名,学号)7. 按升序或降序显示所有学生任一科目的成绩(包括加权成绩)注:程序中可以存储同名的学生,但是不允许学号相同,因此做了部分处理应对这种情况。当搜索某个同名学生时,倘若通过姓名搜索,则会显示所有该姓名的学生,然后再通过学号确定。2.辅助功能1. 全自动生成数据。为便于程序测试,由系统自动随机生成所有数据(包括学生姓名,学科的相关信息,学生的各科成绩等).(本来想写一个程序自动测试脚本的,算法已经成熟了,然而精力有限未能完成)3.模块说明本程序分四个模块: 数据库核心功能模块,数据库辅助功能模块, 数据库界面功能模块,自动数据库生成模块。我认为数据库核心功能模块应负责最底层的文件操作,其他的模块都是基于核心模块的应用型模块。模块间相对独立,以核心功能模块为主,自动数据库生成模块和数据库界面模块都需要频繁调用核心功能模块,如此便实现了功能间的剥离,便于日后的功能扩展和程序升级.保证核心功能的健壮性和容错能力相当重要。对此,我采取了一系列措施:对于每个传入的参数进行严格的检查,包括变量的范围,指针是否为空,变量是否合法等。如果发现异常,就设置错误myerr并终止程序。我的想法是核心功能模块不应该出现参数异常的问题,所有的不合法参数应该在上层模块如界面模块中就进行过滤了,在与用户交互的过程中,所有输入的非法参数都应该被过滤,以防非法参数传入底层模块,甚至写入数据库,造成数据库异常。因此倘若如果经过种种措施后,仍然有非法参数传入核心模块,我就认为程序异常并发出终止程序的命令。而倘若是上层模块出现异常的话,可以返回false标志,而不致于立即终止程序。另外为了更方便地分析程序中的功能异常情况,我又采取了一些措施,包括将二进制数据库文件重写入文本文件,从而可以随时查看数据库中各变量值,从而迅速地对错误进行定位。另外我还写了个别测试程序,如showsubinfo(),showlink()等,这些函数都是在程序莫名其妙地出现异常的情况下为调试而写出来的,目的是查看某类型结构体中的各变量的值。程序出现功能异常,大多数都是变量异常。而结构体中的变量值异常相对来说比较难查出来,因此我写了一系列小测试函数,根据需要插入代码中,每当执行到该处时,就会将该结构体中各变量显示出来,错误一目了然。4.界面说明进入程序后首先是登录界面,初次使用本程序时,会提示初始密码,用户可以在登录后修改密码。初次使用时,由于数据库为空,因此系统会提示添加学生,其中有一个选项是系统自动生成学生,该功能是为测试程序之用。若系统检测到数据库中没有学科就会提示用户添加学科。之后用户就可以进入完整的功能界面了。在界面方面做了小设计。比如当数据库中无学生信息时,界面就只有选项提示用户添加学生,之后若系统检测到数据库中无科目信息时再提示用户添加科目,如果数据库中的科目数已经达到最大允许值(本程序设置的最大科目数为200,可在宏中设置),则界面中就会屏蔽掉添加科目这一选项,即界面会随着数据库中数据的情况进行适当的调整。我认为在界面方面尚未将核心功能开发完全,通过界面的扩展,可以实现更多的功能,从而充分利用核心函数的功能。为了增加功能的通用性,我尽量将核心功能函数进行部分抽象化,对不同功能以宏进行区分,这样可以精简代码,避免代码重复和冗余。二.总体算法设计1.数据存储文件结构a)本程序的二进制存储文件为stuinfo.dat,文件包含两个部分,文件头和数据区,类似于bmp文件结构.文件头中存储了文件信息,包括学生数,科目数,冗余块数,冗余块的位移地址数组,以及学科信息数组及用户的登录密码.当文件进行数据的操作时首先要读入文件头,当数据操作完后会自动修改头文件,头文件的存在使文件能高效的操作.当数据块删除时,不采取文件大块数据整体移动的物理删除方法,而是采用将数据块的flag标志位置零的逻辑删除方法,同时将该数据块的起始偏移地址写入冗余块数组中,当有新数据写入文件时,则由文件头中的冗余块数组得到某个冗余块的偏移地址,然后新数据即可写入该处,而不是简单地追加到文件末,此法可以有效地利用文件空间,减少冗余度.b)由于数据存储文件为二进制形式,因此当对该文件进行数据写入或删除等操作后,无法掌握是否正确地完成了相关功能,文件结构是否保持正常.当程序出现异常时,无法及时定位导致异常的数据块,因此另外生成了一个辅助文件test.txt,将stuinfo.dat文件中的所有变量以文本形式一一写入test.txt,此法便于调试程序及对异常数据的准确定位c)为便于测试程序,需要首先建立一个数据文件,同时输入大量数据,人工输入未免过于麻烦,因此我专门写了个模块用于随机产生数据文件,随机产生学生的姓名,学号,性别,所有科目的成绩,所有学科的学分,开课时间等.随机产生字符串时,需要抽取字符进行组合,对于随机产生姓名,其长度及字符都是随机的,而学号由十二位数字组成,学生的分数,学科的学分都为double型,因此产生随机整数乘以0.5,随机数产生时要严格控制其范围,如分数不能超过100,学分不超过6等.(本想使随机产生的成绩成正态分布,且学生间分数拉开,由于时间有限,算法研究未成熟,因此只能采用简单的随机数生成获得成绩).2.源代码结构本程序包含4个头文件和五个C文件,每个文件功能明确Mydb.h总头文件,包含程序所涉及的所有头文件及全局变量Macro.h宏头文件,包含程序所涉及的所有宏,如文件路径等Struct.h包含所有结构体的定义Func.h包含所有函数的声明Main.c程序主函数Filefunc.c关于文件数据操作(添加,删除)的核心函数(12个函数)Extrafunc.c关于附加功能操作的函数,如搜索,排序等(9个函数)System_gui.c关于与用户交互的文本界面函数(13个函数)Randrecord.c关于随机产生数据的函数(7个函数)三. 详细算法设计及函数说明a)void seterr(char*);该函数用于设置程序中的异常,在代码关键处出错时,该函数会返回错误原因,便于调试. void freeparam();该函数用于文件结束时释放所有全局变量及关闭所有文件void initfile();该函数用于初始化数据文件,即初始化数据文件头void fcntl(long,int,void*,int);用于对文件进行读写操作,将fseek,fread,fwrite集为一体bool addstu(pmystu);用于添加学生信息(姓名,专业班级,性别,学号)bool delstu(long);用于删除学生,参数long为该学生在文件中的偏移地址bool editstu(long,pmystu);用于编辑已有学生的信息bool addsub(psubinfo);用于添加学科信息(学分,名称,开课时间)bool delsub(int);用于删除学科信息,参数为学科的ID号bool editsub(psubinfo);用于编辑已有学科信息bool editmark(psubmark,long);用于编辑学生某科目的成绩,包括(添加,删除,修改)bool makeavemark(pstuinfo);用于计算学生的加权成绩b) long search(char*,int);用于搜索记录(通过姓名或学号搜索学生,通过学科名称搜索学科),集数项搜索功能于一身void showfile();用于将stuinfo.dat二进制信息以文本方式写入test.txt,plink sortlink(plink,int);用于对单链表进行排序,int参数用于表示排序方式plink makelink(plink,double,long);用于将新数据接入链表,double为学生的成绩,long为学生的偏移地址plink marklink(int);用于产生链表,int用于表示将ID为该参数的科目成绩产生链表void freelink(plink);用于释放链表所有节点的空间c)void login_gui();用户登录界面void changekey_gui();用户修改密码界面bool system_gui();总界面,用于调度所有分界面bool addstu_gui();用于交互添加学生信息bool editstu_gui();用于交互编辑学生(包括删除学生)bool inputsub_gui();用于交互编辑输入学科信息bool editsub_gui();用于编辑学科信息(包括删除)bool editmark_gui();用于编辑成绩信息(包括添加,删除,修改)bool showstu(long,int,int*,int);用于显示学生信息(分三种显示模式,SHOW_PRIV:单人信息显示模式,只显示个人信息,不含成绩信息SHOW_PERMARK:单人成绩显示模式SHOW_ALLMARK:多人成绩显示模式 bool search_gui();用于交互搜索记录bool isschid(char*);用于判断学号是否合法 bool showmark_gui();用于交互显示成绩plink findstu_gui(char*);用于处理重名的学生d)void makestu();用于随机产生所有学生信息void makesub();用于随机产生学科信息void makemark();用于随机产生成绩信息long myrand(long,long);用于产生所设范围的任意大随机数void makeword(char*,char);用于产生随机字符串void MakeDataBase();用于产生随机数据文件bool makemajor(char*);用于随机产生专业四.源程序清单(仅给出核心代码部分,源代码在一起提交的文件夹中)typedef char bool;#define FILEPATHc:stuinfo.dat#define INFOPATHc:test.txt#define MAXSPACECOUNT10/系统所记录的最大冗余块数#define MAXSUBCOUNT 20/系统所允许存储的最多科目数#define RANDSTUCOUNT100/系统将自动产生的学生个数#define RANDSUBCOUNT20/系统将自动产生的科目个数#define BUFSIZE20/字符缓冲区大小#define SHOWMAX6/屏幕最大显示的科目数#define TRUE1#define FALSE0#define READ0x81#define WRITE0x82#define SEARCH_SCHID0x83/通过学生的学号进行搜索#define SEARCH_NAME0x85/通过学生的姓名进行搜索#define SEARCH_SUB0x86/通过学科的名称进行搜索#define SHOW_PRIV0x87/显示单个学生的个人信息#define SHOW_PERMARK0x89/显示单个学生的个人成绩#define SHOW_ALLMARK0x90/显示所有学生的某科成绩#define SORT_DECLINE0x92/以降序排列#define SORT_INCLINE0x93/以升序排列#define ALPHAWORD0x94/以字母构成的字符串(用于随机产生学生的姓名#define NUMBERWORD0x95/以数字构成的字符串(用于随机产生学号#define ADDSUB0x96/科目编辑模式为添加#define EDITSUB0x97/科目编辑模式为修改#define BIGNUMBER0x0ffffff/系统延迟采用的循环中的大数#define LONGSIZEsizeof(long)#define INTSIZEsizeof(int)#define LINKSIZEsizeof(link)#define STUINFOSIZE sizeof(stuinfo)#define SUBINFOSIZE sizeof(subinfo)#define TCHINFOSIZEsizeof(tchinfo)#define SUBMARKSIZE sizeof(submark)#define FILEINFOSIZE sizeof(fileinfo)#define MYSTUSIZEsizeof(mystu)#define DATASEEK(FILEINFOSIZE+LONGSIZE)#define DATATRANS(STUINFOSIZE+LONGSIZE)#define SETERR(S)printf(S);return FALSE;/显示出错信息并返回#define NEW(I)(I*)malloc(sizeof(I)/开辟新的内存空间typedef struct _submarkinfoboolflag;/flag=0表该块无效int sub_id;/科目的id号double sub_mark;/该科目的成绩submark,*psubmark;/科目成绩信息typedef struct _stuchar stu_name20;/学生姓名char stu_schid20;/学生学号int stu_sex;/学生性别 0=man 1=womanchar stu_major20;/学生专业和班级(电子0606)mystu,*pmystu;/学生个人信息typedef struct _stuinfoboolflag;/flag=0表该生作废int stu_sysid;/学生id号/系统将为每个学生产生唯一的ID号mystustu_privacy;/学生个人信息long stu_seek;/在文件中的地址int stu_markcount;/已有的成绩数doublestu_avemark;/学生加权平均分submark stu_markMAXSUBCOUNT;/学生成绩数组stuinfo,*pstuinfo;/学生信息(包括个人信息和系统信息)typedef struct _subinfobool flag;/flag=0表该块无效int sub_id;/科目的id号int sub_term;/科目开课的学期double sub_rate;/科目所占的学分char sub_name20;/科目名称subinfo,*psubinfo;/科目信息typedef struct _fileinfoint stucount;/已注册的学生人数int countmax;/最大学生数,用于产生idint spacecount;/文件冗余块数long seekMAXSPACECOUNT;/文件冗余块在文件中的地址int subcount;/已注册的科目的个数subinfo subMAXSUBCOUNT;/科目信息数组fileinfo,*pfileinfo;/学生信息文件头typedef struct _linkdouble mark;long stuseek;struct _link* next;link,*plink;/该结构体用于产生链表/链表用于对成绩排序之用核心功能函数/本函数设置系统错误,并终止程序void seterr(char*err)memset(void*)myerr,0,errnosize);int n=strlen(err);if(nerrnosize-1)n=errnosize;memcpy(myerr,err,n);printf(nn%snn,err);exit(0);/*本函数用于清理所有全局变量包括文件指针和全局结构体指针*/void freeparam()if(fp)fclose(fp);fp=NULL;if(myfileinfo)free(myfileinfo);myfileinfo=NULL;if(mystuinfo)free(mystuinfo);mystuinfo=NULL;/本函数用于对文件进行操作,将常用的文件操作集于一身void fcntl(long seek,int cntlmode,void *pdata,int size)if(!fp)fp=fopen(FILEPATH,rb+);if(!fp)initfile();rewind(fp);fseek(fp,seek,SEEK_SET);if(!pdata)return;if(!size)seterr(fcntl:parameter not matched);switch(cntlmode)case READ:fread(pdata,size,1,fp);break;case WRITE:fwrite(pdata,size,1,fp);break;default:seterr(fcntl:cntlmode invalid);/初始化数据库void initfile()if(!fp)fp=fopen(FILEPATH,wb+);if(!myfileinfo)myfileinfo=NEW(fileinfo);memset(myfileinfo,0,FILEINFOSIZE);myfileinfo-seek0=DATASEEK;int i=0;for(;isubi.sub_id=i+1;fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);/添加学生的核心函数void addstu(pmystu newstuinfo)if(!newstuinfo)seterr(addstu:newstuinfo null);if(search(newstuinfo-stu_schid,SEARCH_SCHID)seterr(addstu:database schid collision);if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);int spacecount=myfileinfo-spacecount;if(spacecount=MAXSPACECOUNT)seterr(addstu:parameter invalid);long seek=myfileinfo-seekspacecount;if(spacecount)myfileinfo-seekspacecount=0;myfileinfo-spacecount-;else myfileinfo-seekspacecount+=DATATRANS;if(!mystuinfo)mystuinfo=NEW(stuinfo);memset(mystuinfo,0,STUINFOSIZE);memcpy(&(mystuinfo-stu_privacy),newstuinfo,MYSTUSIZE);mystuinfo-stu_seek=seek;mystuinfo-flag=1;int i;mystuinfo-stu_sysid=myfileinfo-countmax+1;for(i=0;istu_marki.sub_id=i+1;fcntl(seek,WRITE,mystuinfo,STUINFOSIZE);myfileinfo-stucount+;myfileinfo-countmax+;fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);/删除学生的核心函数void delstu(long delstuseek)if(!delstuseek)seterr(delstu:parameter zero);if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);if(!mystuinfo)mystuinfo=NEW(stuinfo);memset(mystuinfo,0,STUINFOSIZE);fcntl(delstuseek,READ,mystuinfo,STUINFOSIZE);if(!mystuinfo-flag)seterr(delstu:parameter invalid);mystuinfo-flag=0;fcntl(delstuseek,WRITE,mystuinfo,STUINFOSIZE);myfileinfo-stucount-;myfileinfo-spacecount+;int count=myfileinfo-spacecount;if(countseekcount=delstuseek;else myfileinfo-spacecount-;fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);/编辑一个已存在学生的核心函数void editstu(long editstuseek,pmystu tempstu)if(!tempstu)seterr(editstu:parameter null);if(!mystuinfo)mystuinfo=NEW(stuinfo);memset(mystuinfo,0,STUINFOSIZE);fcntl(editstuseek,READ,mystuinfo,STUINFOSIZE);if(!mystuinfo-flag)seterr(editstu:editstu invalid);plink linkhead=search(tempstu-stu_schid,SEARCH_SCHID);if(linkhead&linkhead-data-editstuseek)seterr(editstu:database schid collision);memcpy(&mystuinfo-stu_privacy,tempstu,MYSTUSIZE);fcntl(editstuseek,WRITE,mystuinfo,STUINFOSIZE);/添加新的学科的核心函数void addsub(psubinfo newsub)if(!newsub)seterr(addsub:parameter null);if(newsub-sub_termsub_term8)seterr(addsub:parameter invalid);if(newsub-sub_ratesub_rate6)seterr(addsub:parameter invalid);if(search(newsub-sub_name,SEARCH_SUB)seterr(addsub:database sub collision);if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);int subcount=myfileinfo-subcount;if(subcount=MAXSUBCOUNT)seterr(addsub:subject full);psubinfo psubtemp=myfileinfo-sub;newsub-flag=1;int i;for(i=0;iflag)newsub-sub_id=psubtemp-sub_id;memcpy(psubtemp,newsub,SUBINFOSIZE);break;if(i=MAXSUBCOUNT)seterr(addsub:subject all in use);myfileinfo-subcount+;fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);/删除一个已经存在学科的核心函数void delsub(int subid)if(subidMAXSUBCOUNT)seterr(delsub:subid invalid);if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);if(myfileinfo-subcountsub+subid-1;if(!subtemp-flag)seterr(delsub:flag invalid);subtemp-flag=0;myfileinfo-subcount-;fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);if(!mystuinfo)mystuinfo=NEW(stuinfo);long seek=DATASEEK;int i;psubmark marktemp=NULL;for(i=0;istucount;i+,seek+=DATATRANS)fcntl(seek,READ,mystuinfo,STUINFOSIZE);if(!mystuinfo-flag)i-;continue;marktemp=mystuinfo-stu_mark+subid-1;if(marktemp-flag)memset(marktemp,0,SUBMARKSIZE);mystuinfo-stu_markcount-;else continue;fcntl(seek,WRITE,mystuinfo,STUINFOSIZE);makeavemark(seek);/编辑一个已经存在的学科的核心函数void editsub(psubinfo newsub)if(!newsub)seterr(editsub:newsub null);if(!newsub-flag)seterr(editsub:newsub invalid);int subid=newsub-sub_id;if(subidMAXSUBCOUNT)seterr(editsub:subid invalid);int term=newsub-sub_term;if(term8)seterr(editsub:subterm invalid);double rate=newsub-sub_rate;if(rate6)seterr(editsub:subrate invalid);int size=strlen(newsub-sub_name);if(size=20)newsub-sub_name19=0;if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);plink linkhead=search(newsub-sub_name,SEARCH_SUB);if(linkhead&linkhead-next)seterr(editsub:search invalid);if(linkhead&linkhead-data-subid)seterr(editsub:database sub collision);newsub-flag=1;psubinfo subtemp=myfileinfo-sub+subid-1;memcpy(subtemp,newsub,SUBINFOSIZE);fcntl(0,WRITE,myfileinfo,FILEINFOSIZE);if(!mystuinfo)mystuinfo=NEW(stuinfo);int count=myfileinfo-stucount;int i;long seek=DATASEEK;for(i=0;iflag)i-;continue;makeavemark(seek);/编辑某学生某科目的核心函数void editmark(psubmark newmark,long stuseek)if(!newmark|!stuseek)seterr(addmark:parameter null);int subid=newmark-sub_id;if(subidMAXSUBCOUNT|!subid)seterr(editmark:subid invalid);double mark=newmark-sub_mark;if(mark100)seterr(editmark:submark invalid);if(!mystuinfo)mystuinfo=NEW(stuinfo);memset(mystuinfo,0,STUINFOSIZE);fcntl(stuseek,READ,mystuinfo,STUINFOSIZE);if(!mystuinfo-flag)seterr(editmark:student invalid);psubmark marktemp=mystuinfo-stu_mark+subid-1;int flag1=marktemp-flag,flag2=newmark-flag;if(!flag1&!flag2)seterr(editmark:markflag invalid);memcpy(marktemp,newmark,SUBMARKSIZE);if(!flag1&flag2)mystuinfo-stu_markcount+;if(flag1&!flag2)mystuinfo-stu_markcount-;fcntl(stuseek,WRITE,mystuinfo,STUINFOSIZE);makeavemark(stuseek);/计算某学生的加权分数的核心函数void makeavemark(long stuseek)if(!stuseek)seterr(makeavemark:parameter null);if(!mystuinfo)mystuinfo=NEW(stuinfo);memset(mystuinfo,0,STUINFOSIZE);fcntl(stuseek,READ,mystuinfo,STUINFOSIZE);if(!mystuinfo-flag)seterr(makeavemark:parameter invalid);if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);int subcount=myfileinfo-subcount;if(!subcount|!mystuinfo-stu_markcount)mystuinfo-stu_avemark=0;fcntl(mystuinfo-stu_seek,WRITE,mystuinfo,STUINFOSIZE);return;psubinfo subtemp=myfileinfo-sub;psubmark marktemp=mystuinfo-stu_mark;int i;double marksum=0.0,rate,ratesum=0.0;for(i=0;iflag)i-;continue;if(!marktemp-flag)continue;rate=subtemp-sub_rate;ratesum+=rate;marksum+=marktemp-sub_mark*rate;if(ratesum0.1|marksumstu_avemark=0;else mystuinfo-stu_avemark=marksum/ratesum;fcntl(mystuinfo-stu_seek,WRITE,mystuinfo,STUINFOSIZE);/*本函数承担着数据库的所有搜索任务 包括由组名搜索组的ID,由学生的姓名和学号搜索学生,并返回该生在文件中的偏移地址*/plink search(char *pdata,int searchtype)if(!myfileinfo)myfileinfo=NEW(fileinfo);fcntl(0,READ,myfileinfo,FILEINFOSIZE);plink linkhead=NULL,linktemp=NULL;if(searchtype=SEARCH_SUB)psubinfo subtemp=myfileinfo-sub;int i;for(i=0;iflag&!strcmp(subtemp-sub_name,pdata)linkhead=NEW(link);memset(linkhead,0,LINKSIZE);linkhead-data=subtemp-sub_id;linkhead-next=NULL;return linkhead;if(strlen(pdata)=19)pdata19=0;if(!mystuinfo)mystuinfo=NEW(stuinfo);long seek=DATASEEK;int count=myfileinfo-stucount,i;for(i=0;iflag)i-;continue;pmystu stutemp=&mystuinfo-stu_privacy;switch(searchtype)case SEARCH_SCHID:if(!strcmp(stutemp-stu_schid,pdata)linkhead=NEW(link);linkhead-data=mystuinfo-stu_seek;linkhead-next=NULL;return linkhead;break;case SEARCH_NAME:if(!strcmp(stutemp-stu_name,pdata)linktemp=NEW(link);linktemp-data=mystuinfo-stu_seek;linktemp-next=linkhead;linkhead=linktemp;break;default:retur

温馨提示

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

评论

0/150

提交评论