下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 C语言课程设计_实验报告

C语言课程设计_实验报告.doc

C语言课程设计_实验报告

yuxiaoh
2010-12-21 0人阅读 举报 0 0 暂无简介

简介:本文档为《C语言课程设计_实验报告doc》,可适用于高等教育领域

C语言课程设计C语言课程设计班级学号学生姓名田如雪刘哲强 赵丹平 胡意提交日期成绩教师签名:数学与信息科学学院一、实践的目的和要求加深对C语言课程所学知识的理解,进一步巩固C语言算法规则学会编制结构清晰风格良好数据结构适当的C程序,从而具备解决综合性问题的能力二、内容在熟练掌握C语言的基础知识:数据类型(整型实型字符型指针数组结构等)运算类型(算术运算逻辑运算自增自减运算赋值运算等)程序结构(顺序结构判断选择结构循环结构)大程序的功能分解方法(即函数的使用)等进一步掌握各种函数的应用以及文件的读写操作等三、实验任务:学生成绩管理系统设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针功能要求:实现学生信息的输入查询插入删除排序打印等操作。四、设计思路(需求分析或算法分析)学生的主要信息包括:学号、姓名、C语言成绩、数学成绩、英语成绩、总分、平均分、名次(数据分析:包括所涉及的函数数据结构等)用结构体数组来存储信息,用Add()函数来实现信息的录入,用Disp()函数来显示打印信息,用Qur()函数来查找信息,用Sort()函数来排序用Insert()函数来插入信息,用Modify()函数来修改信息,用Del()函数来删除信息,用Save()函数来保存信息,用Exit函数来退出通讯录对小组进行分工,每个人分配至少两个函数的代码实现,其余的再按情况进行分配程序代码#include"stdioh"*标准输入输出函数库*#include"stdlibh"*标准函数库*#include"stringh"*字符串函数库*#include"conioh"*屏幕操作函数库*#defineHEADER"|学生成绩表|nn"#defineHEADER"|学号|姓名|C语言|数学|英语|总分|平均分|名次|n"#defineHEADER"|||||||||"#defineFORMAT"|s|s|d|d|d|d|f|d|n"#defineDATAp>datanum,p>dataname,p>datacgrade,p>datamgrade,p>dataegrade,p>datatotal,p>dataave,p>datamingci#defineEND"n"intsaveflag=*是否需要存盘的标志变量**定义与学生有关的数据结构*typedefstructstudent*标记为student*{charnum*学号*charname*姓名*intcgrade*C语言成绩*intmgrade*数学成绩*integrade*英语成绩*inttotal*总分*floatave*平均分*intmingci*名次*}*定义每条记录或结点的数据结构标记为:node*typedefstructnode{structstudentdata*数据域*structnode*next*指针域*}Node,*Link*Node为node类型的结构变量*Link为node类型的指针变量*voidmenu()*主菜单*{system("cls")*调用DOS命令清屏与clrscr()功能相同*printf("nn学生成绩管理系统n")printf("*************************菜单*********************************n")printf("*输入数据修改数据*n")printf("*打印数据插入数据*n")printf("*排序数据删除数据*n")printf("*统计数据保存数据*n")printf("*查找数据退出系统*n")printf("**************************************************************n")}*printheader函数格式化表头*voidprintheader()*格式化输出表头*{printf(HEADER)printf(HEADER)printf(HEADER)}*printdata函数格式化输出数据*voidprintdata(Node*pp)*格式化输出表中数据*{Node*pp=ppprintf(FORMAT,DATA)}*Wrong函数输出按键错误信息*voidWrong()*输出按键错误信息*{printf("nnnnn***********错误!:输入发生错误!请按任意键继续**********n")getch()}*NOfind函数用于输出未查找此学生的信息*voidNofind()*输出未查找此学生的信息*{printf("n=====>没有找到此学生!n")}*Disp函数*voidDisp(Linkl)*显示单链表l中存储的学生记录内容为student结构中定义的内容*{Node*pp=l>next*l存储的是单链表中头结点的指针该头结点没有存储学生信息指针域指向的后继结点才有学生信息*if(!p)*p==,在stdlib中定义为*{printf("n=====>没有学生数据!n")getch()return}printf("n")printheader()*输出表格头部*while(p)*逐条输出链表中存储的学生信息*{printdata(p)p=p>next*移动直下一个结点*printf(HEADER)}getch()}*************************************************************作用:用于定位链表中符合要求的节点并返回指向该节点的指针参数:findmess保存要查找的具体内容nameornum保存按什么查找在单链表l中查找**************************************************************Node*Locate(Linkl,charfindmess,charnameornum){Node*rif(strcmp(nameornum,"num")==)*按学号查询*{r=l>nextwhile(r){if(strcmp(r>datanum,findmess)==)*若找到findmess值的学号*returnrr=r>next}}elseif(strcmp(nameornum,"name")==)*按姓名查询*{r=l>nextwhile(r){if(strcmp(r>dataname,findmess)==)*若找到findmess值的学生姓名*returnrr=r>next}}return*若未找到返回一个空指针*}*输入字符串并进行长度验证(长度<lens)*voidstringinput(char*t,intlens,char*notice){charndo{printf(notice)*显示提示信息*scanf("s",n)*输入字符串*if(strlen(n)>lens)printf("n超出要求长度!n")*进行长度校验超过lens值重新输入*}while(strlen(n)>lens)strcpy(t,n)*将输入的字符串拷贝到字符串t中*}*输入分数<=分数<=)*intnumberinput(char*notice){intt=do{printf(notice)*显示提示信息*scanf("d",t)*输入分数*if(t>||t<)printf("n分数必须在,中!n")*进行分数校验*}while(t>||t<)returnt}*增加学生记录*voidAdd(Linkl){Node*p,*r,*s*实现添加操作的临时的结构体指针变量*charch,flag=,numr=ls=l>nextsystem("cls")Disp(l)*先打印出已有的学生信息*while(r>next!=)r=r>next*将指针移至于链表最末尾准备添加记录*while()*一次可输入多条记录直至输入学号为的记录结点添加操作*{while()*输入学号保证该学号没有被使用若输入学号为则退出添加记录操作*{stringinput(num,,"n输入学号(输入返回菜单):")*格式化输入学号并检验*flag=if(strcmp(num,"")==)*输入为则退出添加操作返回主界面*{return}s=l>nextwhile(s)*查询该学号是否已经存在若存在则要求重新输入一个未被占用的学号*{if(strcmp(s>datanum,num)==){flag=break}s=s>next}if(flag==)*提示用户是否重新输入*{getch()printf("=====>学号s不存在,再试一次(是(y)否(n)):",num)scanf("c",ch)if(ch=='y'||ch=='Y')continueelsereturn}else{break}}p=(Node*)malloc(sizeof(Node))*申请内存空间*if(!p){printf("nallocatememoryfailure")*如没有申请到打印提示信息*return*返回主界面*}strcpy(p>datanum,num)*将字符串num拷贝到p>datanum中*stringinput(p>dataname,,"姓名:")p>datacgrade=numberinput("C语言成绩:")*输入并检验分数分数必须在-之间*p>datamgrade=numberinput("数学成绩:")*输入并检验分数分数必须在-之间*p>dataegrade=numberinput("英语成绩:")*输入并检验分数分数必须在-之间*p>datatotal=p>dataegradep>datacgradep>datamgrade*计算总分*p>dataave=(float)(p>datatotal)*计算平均分*p>datamingci=p>next=*表明这是链表的尾部结点*r>next=p*将新建的结点加入链表尾部中*r=psaveflag=}return}*查询学生记录*voidQur(Linkl)*按学号或姓名查询学生记录*{intselect*:按学号查:按姓名查其他:返回主界面(菜单)*charsearchinput*保存用户输入的查询内容*Node*pif(!l>next)*若链表为空*{system("cls")printf("n=====>没有学生数据!n")getch()return}system("cls")printf("n=====>通过学号查找=====>通过姓名查找n")printf("请选择,:")scanf("d",select)if(select==)*按学号查询*{stringinput(searchinput,,"请输入已存在的学生的学号:")p=Locate(l,searchinput,"num")*在l中查找学号为searchinput值的节点并返回节点的指针*if(p)*若p!=*{printheader()printdata(p)printf(END)printf("按任意键返回")getch()}elseNofind()getch()}elseif(select==)*按姓名查询*{stringinput(searchinput,,"请输入已存在学生的姓名:")p=Locate(l,searchinput,"name")if(p){printheader()printdata(p)printf(END)printf("请按任意键返回")getch()}elseNofind()getch()}elseWrong()getch()}*删除学生记录:先找到保存该学生记录的节点然后删除该节点*voidDel(Linkl){intselNode*p,*rcharfindmessif(!l>next){system("cls")printf("n=====>没有学生记录!n")getch()return}system("cls")Disp(l)printf("n=====>通过学号删除=====>通过姓名删除n")printf("请输入你的选择,:")scanf("d",sel)if(sel==){stringinput(findmess,,"请输入已存在学生的学号:")p=Locate(l,findmess,"num")if(p)*p!=*{r=lwhile(r>next!=p)r=r>nextr>next=p>next*将p所指节点从链表中去除*free(p)*释放内存空间*printf("n=====>删除成功!n")saveflag=}elseNofind()getch()}elseif(sel==)*先按姓名查询到该记录所在的节点*{stringinput(findmess,,"请输入已存在学生的姓名:")p=Locate(l,findmess,"name")if(p){r=lwhile(r>next!=p)r=r>nextr>next=p>nextfree(p)printf("n=====>删除成功!n")getch()saveflag=}elseNofind()getch()}elseWrong()getch()}*修改学生记录。先按输入的学号查询到该记录然后提示用户修改学号之外的值学号不能修改*voidModify(Linkl){Node*pcharfindmessif(!l>next){system("cls")printf("n=====>没有学生记录!n")getch()return}system("cls")printf("修改学生记录")Disp(l)stringinput(findmess,,"n请输入已存在学生的学号:")*输入并检验该学号*p=Locate(l,findmess,"num")*查询到该节点*if(p)*若p!=,表明已经找到该节点*{printf("学号:s,n",p>datanum)printf("姓名:s,",p>dataname)stringinput(p>dataname,,"请输入新姓名:")printf("C语言成绩:d,",p>datacgrade)p>datacgrade=numberinput("C语言成绩:")printf("数学成绩:d,",p>datamgrade)p>datamgrade=numberinput("数学成绩:")printf("英语成绩:d,",p>dataegrade)p>dataegrade=numberinput("英语成绩:")p>datatotal=p>dataegradep>datacgradep>datamgradep>dataave=(float)(p>datatotal)p>datamingci=printf("n=====>修改成功!n")Disp(l)saveflag=}elseNofind()getch()}*插入记录:按学号查询到要插入的节点的位置然后在该学号之后插入一个新节点。*voidInsert(Linkl){Linkp,v,newinfo*p指向插入位置newinfo指新插入记录*charch,num,s*s保存插入点位置之前的学号,num保存输入的新记录的学号*intflag=v=l>nextsystem("cls")Disp(l)while(){stringinput(s,,"n请输入你将新的学生插在哪个学号之后?:")flag=v=l>nextwhile(v)*查询该学号是否存在flag=表示该学号存在*{if(strcmp(v>datanum,s)==){flag=break}v=v>next}if(flag==)break*若学号存在则进行插入之前的新记录的输入操作*else{getch()printf("n=====>学号:s不存在,再输一次(yn):",s)scanf("c",ch)if(ch=='y'||ch=='Y'){continue}else{return}}}*以下新记录的输入操作与Add()相同*stringinput(num,,"输入新的学生的学号:")v=l>nextwhile(v){if(strcmp(v>datanum,num)==){printf("=====>抱歉,学号:'s'已经存在!n",num)printheader()printdata(v)printf("n")getch()return}v=v>next}newinfo=(Node*)malloc(sizeof(Node))if(!newinfo){printf("nallocatememoryfailure")*如没有申请到打印提示信息*return*返回主界面*}strcpy(newinfo>datanum,num)stringinput(newinfo>dataname,,"姓名:")newinfo>datacgrade=numberinput("C语言成绩:")newinfo>datamgrade=numberinput("数学成绩:")newinfo>dataegrade=numberinput("英语成绩:")newinfo>datatotal=newinfo>dataegradenewinfo>datacgradenewinfo>datamgradenewinfo>dataave=(float)(newinfo>datatotal)newinfo>datamingci=newinfo>next=saveflag=*在main()有对该全局变量的判断若为,则进行存盘操作**将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*p=l>nextwhile(){if(strcmp(p>datanum,s)==)*在链表中插入一个节点*{newinfo>next=p>nextp>next=newinfobreak}p=p>next}Disp(l)printf("nn")getch()}*统计该班的总分第一名和单科第一,和各科不及格人数*voidTongji(Linkl){Node*pm,*pe,*pc,*pt*用于指向分数最高的节点*Node*r=l>nextintcountc=,countm=,counte=,count=*保存三门成绩中不及格的人数*floatacountc=,acountm=,acounte=if(!r){system("cls")printf("n=====>没有学生记录!n")getch()return}system("cls")Disp(l)pm=pe=pc=pt=rwhile(r){countif(r>datacgrade<)countcif(r>datamgrade<)countmif(r>dataegrade<)counteif(r>datacgrade>=pc>datacgrade)pc=rif(r>datamgrade>=pm>datamgrade)pm=rif(r>dataegrade>=pe>dataegrade)pe=rif(r>datatotal>=pt>datatotal)pt=racountc=acountc(float)r>datacgradeacountm=acountm(float)r>datamgradeacounte=acounte(float)r>dataegrader=r>next}printf("n统计结果nn")printf("|科目|C语言|数学|英语|总分|n")printf("||||||n")printf("|平均分|f|f|f|f|n",acountccount,acountmcount,acountecount,(acountcacountmacounte)count)printf("||||||n")printf("nC语言成绩小于的有d人n",countc)printf("数学成绩小于的有d人n",countm)printf("英语成绩小于的有d人n",counte)printf("n")printf("总分最高是:s成绩为:dn",pt>dataname,pt>datatotal)printf("C语言最高是:s成绩为:dn",pc>dataname,pc>datacgrade)printf("数学最高是:s成绩为:dn",pm>dataname,pm>datamgrade)printf("英语最高是:s成绩为:dn",pe>dataname,pe>dataegrade)printf("nn请按任意键返回")getch()}*利用插入排序法实现单链表的按总分字段的降序排序从高到低*voidSort(Linkl){LinkllNode*p,*rr,*sinti=if(l>next==){system("cls")printf("n=====>没有学生记录!n")getch()return}ll=(Node*)malloc(sizeof(Node))*用于创建新的节点*if(!ll){printf("nallocatememoryfailure")*如没有申请到打印提示信息*return*返回主界面*}ll>next=system("cls")Disp(l)*显示排序前的所有学生记录*printf("n排序后:n")p=l>nextwhile(p)*p!=*{s=(Node*)malloc(sizeof(Node))*新建节点用于保存从原链表中取出的节点信息*if(!s)*s==*{printf("nallocatememoryfailure")*如没有申请到打印提示信息*return}*返回主界面*s>data=p>data*填数据域*s>next=*指针域为空*rr=ll*rr链表于存储插入单个节点后保持排序的链表ll是这个链表的头指针,每次从头开始查找插入位置*while(rr>next!=rr>next>datatotal>=p>datatotal){rr=rr>next}*指针移至总分比p所指的节点的总分小的节点位置*if(rr>next==)*若新链表ll中的所有节点的总分值都比p>datatotal大时就将p所指节点加入链表尾部*rr>next=selse*否则将该节点插入至第一个总分字段比它小的节点的前面*{s>next=rr>nextrr>next=s}p=p>next*原链表中的指针下移一个节点*}l>next=ll>next*ll中存储是的已排序的链表的头指针*p=l>next*已排好序的头指针赋给p准备填写名次*while(p!=)*当p不为空时进行下列操作*{i*结点序号*p>datamingci=i*将名次赋值*p=p>next}*指针后移*Disp(l)saveflag=printf("n=====>排序完成!n")}*数据存盘,若用户没有专门进行此操作且对数据有修改在退出系统时会提示用户存盘*voidSave(Linkl){FILE*fpNode*pintcount=fp=fopen("c:student","wb")*以只写方式打开二进制文件*if(fp==)*打开文件失败*{printf("n=====>文件打开失败!n")getch()return}p=l>nextwhile(p){if(fwrite(p,sizeof(Node),,fp)==)*每次写一条记录或一个节点信息至文件*{p=p>nextcount}else{break}}if(count>){getch()printf("nnnnn=====>保存文件完成,总的学生数是:dn",count)getch()saveflag=}else{system("cls")printf("当前链接为空,没有学生记录被保存!n")getch()}fclose(fp)*关闭此文件*}*主函数――――*voidmain(){Linkl*定义链表*FILE*fp*文件指针*intselect*保存选择结果变量*charch*保存(y,Y,n,N)*intcount=*保存文件中的记录条数(或结点个数)*Node*p,*r*定义记录指针变量*l=(Node*)malloc(sizeof(Node))if(!l){printf("nallocatememoryfailure")*如没有申请到打印提示信息*return}*返回主界面*l>next=r=lfp=fopen("C:student","ab")*以追加方式打开一个二进制文件可读可写若此文件不存在会创建此文件*if(fp==){printf("n=====>不能打开文件!n")exit()}while(!feof(fp)){p=(Node*)malloc(sizeof(Node))if(!p){printf("memorymallocfailure!n")*没有申请成功*exit()*退出*}if(fread(p,sizeof(Node),,fp)==)*一次从文件中读取一条学生成绩记录*{p>next=r>next=pr=p*r指针向后移一个位置*count}}fclose(fp)*关闭文件*printf("n=====>打开文件成功,总的学生数目是:dn",count)menu()while(){system("cls")menu()p=rprintf("n请输入你的选择(~):")*显示提示信息*scanf("d",select)if(select==){if(saveflag==)*若对链表的数据有修改且未进行存盘操作则此标志为*{getch()printf("n=====>是否保存修改到文件是(y)否(n):")scanf("c",ch)if(ch=='y'||ch=='Y')Save(l)}printf("n=====>班制作!nn=====>谢谢您的使用!n")getch()break}switch(select){case:Add(l)break*增加学生记录*case:Del(l)break*删除学生记录*case:Qur(l)break*查询学生记录*case:Modify(l)break*修改学生记录*case:Insert(l)break*插入学生记录*case:Tongji(l)break*统计学生记录*case:Sort(l)break*排序学生记录*case:Save(l)break*保存学生记录*case:system("cls")Disp(l)break*显示学生记录*default:Wrong()getch()break*按键有误必须为数值*}}}六、函数说明本组所写的程序共有下例函数:Add(),Del(),Disp(),Insert(),Locate(),menu(),Modify(),Nofind(),numberinput(),printdata(),printheader(),Qur(),Save(),Sort(),stringinput(),Tongji(),Wrong()以下为各函数的功能说明,代码以及流程图。Add():此函数的功能是增加学生记录首先定义一些指向学生记录的指针再打印出学生信息以便观察再将指针移至最未尾准加添加记录输入学号如果输入学号为则退出添加记录操作否则查询该学号是否已经存在若存在则要求重新输入一个未被占用的学号在增加记录过程中会检验分数的输入是否合法即分数应在~之间。源代码:*增加学生记录*voidAdd(Linkl){Node*p,*r,*s*实现添加操作的临时的结构体指针变量*charch,flag=,numr=ls=l>nextsystem("cls")Disp(l)*先打印出已有的学生信息*while(r>next!=)r=r>next*将指针移至于链表最末尾准备添加记录*while()*一次可输入多条记录直至输入学号为的记录结点添加操作*{while()*输入学号保证该学号没有被使用若输入学号为则退出添加记录操作*{stringinput(num,,"n输入学号(输入返回菜单):")*格式化输入学号并检验*flag=if(strcmp(num,"")==)*输入为则退出添加操作返回主界面*{return}s=l>nextwhile(s)*查询该学号是否已经存在若存在则要求重新输入一个未被占用的学号*{if(strcmp(s>datanum,num)==){flag=break}s=s>next}if(flag==)*提示用户是否重新输入*{getch()printf("=====>学号s不存在,再试一次(是(y)否(n)):",num)scanf("c",ch)if(ch=='y'||ch=='Y')continueelsereturn}else{break}}p=(Node*)malloc(sizeof(Node))*申请内存空间*if(!p){printf("nallocatememoryfailure")*如没有申请到打印提示信息*return*返回主界面*}strcpy(p>datanum,num)*将字符串num拷贝到p>datanum中*stringinput(p>dataname,,"姓名:")p>datacgrade=numberinput("C语言成绩:")*输入并检验分数分数必须在-之间*p>datamgrade=numberinput("数学成绩:")*输入并检验分数分数必须在-之间*p>dataegrade=numberinput("英语成绩:")*输入并检验分数分数必须在-之间*p>datatotal=p>dataegradep>datacgradep>datamgrade*计算总分*p>dataave=(float)(p>datatotal)*计算平均分*p>datamingci=p>next=*表明这是链表的尾部结点*r>next=p*将新建的结点加入链表尾部中*r=psaveflag=}return}Del():本函数的功能是删除学生记录先找到保存该学生记录的节点然后再删除该节点。程序中可以通过学号来删除也可以通过姓名来删除。如果学生没有打到则打印没有该学生节点。源代码:*删除学生记录:先找到保存该学生记录的节点然后删除该节点*voidDel(Linkl){intselNode*p,*rcharfindmessif(!l>next){system("cls")printf("n=====>没有学生记录!n")getch()return}system("cls")Disp(l)printf("n=====>通过学号删除=====>通过姓名删除n")printf("请输入你的选择,:")scanf("d",sel)if(sel==){stringinput(findmess,,"请输入已存在学生的学号:")p=Locate(l,findmess,"num")if(p)*p!=*{r=lwhile(r>next!=p)r=r>nextr>next=p>next*将p所指节点从链表中去除*free(p)*释放内存空间*printf("n=====>删除成功!n")saveflag=}elseNofind()getch()}elseif(sel==)*先按姓名查询到该记录所在的节点*{stringinput(findmess,,"请输入已存在学生的姓名:")p=Locate(l,findmess,"name")if(p){r=lwhile(r>next!=p)r=r>nextr>next=p>nextfree(p)printf("n=====>删除成功!n")getch()saveflag=}elseNofind()getch()}elseWrong()getch()}流程图:Qur():本函数的功能是按学号或者姓名查询学生记录。首先要求用户选择是按学号还是按姓名来查询学生记录如果没有找到则打印没有找到该学生信息。源代码:*查询学生记录*voidQur(Linkl)*按学号或姓名查询学生记录*{intselect*:按学号查:按姓名查其他:返回主界面(菜单)*charsearchinput*保存用户输入的查询内容*Node*pif(!l>next)*若链表为空*{system("cls")printf("n=====>没有学生数据!n")getch()return}system("cls")printf("n=====>通过学号查找=====>通过姓名查找n")printf("请选择,:")scanf("d",select)if(select==)*按学号查询*{stringinput(searchinput,,"请输入已存在的学生的学号:")p=Locate(l,searchinput,"num")*在l中查找学号为searchinput值的节点并返回节点的指针*if(p)*若p!=*{printheader()printdata(p)printf(END)printf("按任意键返回")getch()}elseNofind()getch()}elseif(select==)*按姓名查询*{stringinput(searchinput,,"请输入已存在学生的姓名:")p=Locate(l,searchinput,"name")if(p){printheader()printdata(p)printf(END)printf("请按任意键返回")getch()}elseNofind()getch()}elseWrong()getch()}流程图:Disp():本函数的功能是显示单链表中存储的学生记录的信息。如果一个学生记录都没有则提示用户“没有学生记录”。源代码:*Disp函数*voidDisp(Linkl)*显示单链表l中存储的学生记录内容为student结构中定义的内容*{Node*pp=l>next*l存储的是单链表中头结点的指针该头结点没有存储学生信息指针域指向的后继结点才有学生信息*if(!p)*p==,在stdlib中定义为*{printf("n=====>没有学生数据!n")getch()return}printf("n")printheader()*输出表格头部*while(p)*逐条输出链表中存储的学生信息*{printdata(p)p=p>next*移动直下一个结点*printf(HEADER)}getch()}menu():本函数的功能是为用户提供一个菜单操作便于用户对学生成绩进行更加方便更加直观的操作。此菜单为用户提供种操作选项。源代码:*主函数*voidmain(){Linkl*定义链表*FILE*fp*文件指针*intselect*保存选择结果变量*charch*保存(y,Y,n,N)*intcount=*保存文件中的记录条数(或结点个数)*Node*p,*r*定义记录指针变量*l=(Node*)malloc(sizeof(Node))if(!l){printf("nallocatememoryfailure")*如没有申请到打印提示信息*return}*返回主界面*l>next=r=lfp=fopen("C:student","ab")*以追加方式打开一个二进制文件可读可写若此文件不存在会创建此文件*if(fp==){printf("n=====>不能打开文件!n")exit()}while(!feof(fp)){p=(Node*)malloc(sizeof(Node))if(!p){printf("memorymallocfailure!n")*没有申请成功*exit()*退出*}if(fread(p,sizeof(Node),,fp)==)*一次从文件中读取一条学生成绩记录*{p>next=r>next=pr=p*r指针向后移一个位置*count}}fclose(fp)*关闭文件*printf("n=====>打开文件成功,总的学生数目是:dn",count)menu()while(){system("cls")menu()p=rprintf("n请输入你的选择(~):")*显示提示信息*scanf("d",select)if(select==){if(saveflag==)*若对链表的数据有修改且未进行存盘操作则此标志为*{

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/45

C语言课程设计_实验报告

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利