下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程设计报告学生成绩管理系统姓名:_ 汤玉宝班 级:09 计算机本科 3 班学 号:50902013032指导老师:_王磊成绩:_完成时间:2010-6-26完成地点:_实验室 B523目录第一章、设计任务分析 .1.1.1 目标.1.1.2 要求.1.1.3 学生成绩管理系统的功能 .1.第二章、模块设计 .2.2.1 主模块.2.2.2 初始化模块.2.2.3 输入记录. 3.2.4 从表中删除记录.3.2.5 显示所有记录 .3.2.6 按照姓名查找.3.2.7 保存记录到文件.3.2 8 从文件中读入记录 .3.2.9 计算所有学生的总分和平均分 .4.2.10 插入记录至 U
2、表中 .4.2.11 复制文件.4.2.12 排序.4.2.13 追加记录到文件.4.2.14 索引.4.2.15 分类合计.4.第三章、主要数据结构 .5.第四章、流程图.5.第五章、源代码.6.第六章、测试情况.1.96.1 登陆页面如图 6-1 所示. 1.9.6.2 输入学生信息数据页面如图 6-2 所示.1.96.3 删除记录页面如图 6-3 所示.1.9.6.4 查找全部记录页面如图 6-4 所示.2.06.6 保存文件页面如图 6-6 所示.2.0.6.7 读文件页面如图 6-7 所示. 2.0.6.8 计算总分和平均分页面如图 6-8 所示.2.06.9 插入记录页面如图 6-
3、9 所示.2.0.6.10 复制文件如图 6-10 所示.2.0.6.12 追加记录页面如图 6-12.2.0.6.13 索引成功页面如图 6-13 所示.2.1.6.14 分类合计页面如图 6-14.2.1.第七章、小结.2.1.第一章、设计任务分析1.1目标(1)掌握和利用 C 语言进行程序设计的能力。(2)理解和运用结构化程序设计的思想和方法。(3)掌握开发一个小型实用系统的基本方法。(4)学会调试一个较长程序的基本方法。(5)掌握书写程序设计开发文档的能力(书写课程设计报告)。1.2要求(1)用 C 语言实现系统。(2)利用结构体数组实现学生成绩的数据结构设计。(3)系统具有增加、查询
4、、插入、排序等基本功能。(4)系统的各个功能模块要求用函数的形式实现。(5)完成设计任务并书写课程设计报告。(6)将学生成绩信息存在文件中。1.3学生成绩管理系统的功能(1) 显示系统菜单(2) 初始化单链表为空指针(3) 连续添加学生的信息,当输入学号的第一个字符为 时结束输入(4) 从单链表中删除指定学号的学生信息(5) 显示当前单链表中的所有记录(6) 查找指定姓名的学生信息(7) 把当前单链表中的内容保存到指定的文件(8) 从指定文件中读入记录到单链表中(9)计算当前单链表中学生的总分和平均成绩(10)插入一条记录到单链表中(11)复制文件备份(12)按学生成绩从高到低进行排序(13)
5、将当前单链表中的记录追加到指定的文件中(14)按照学号从小到大的顺序排序(15)按班统计学生成绩 此题主要考察我们对结构体、指针、文件的操作,以及 C 语言算法的掌握,所以完成 此题目要求较高的设计能力,尤其是要有大局意识。如何调试程序也非常重要,通过这 个程序可学到以前调试程序没有的经验。菜单中的每一个选项都对应一个子程序。第二章、模块设计将学生成绩管理系统划分为以下几个模块2.1主模块功能:显示系统菜单。使用 switch 条件语句调用主菜单函数,选择菜单中要选择对象来执行不同的模块。2.2初始化模块功能:初始化单链表为空指针。用 STUDENT 指向结构体的指针,并判断 info 指针,
6、返回空指针。2.3输入记录功能:连续添加学生的信息,当输入学号的第一个字符为 时结束输入。其中包括学生姓名、学号和课程的相关信息,用 input() 操作。2.4从表中删除记录功能:从单链表中删除指定学号的学生信息。用 while 循环语句找到要删除的记录,并用 print 输出语句提示删除后不要忘记保存 文件。2.5显示所有记录功能:显示当前单链表中的所有记录。2.6按照姓名查找功能:查找指定姓名的学生信息。用 while 语句寻找所输入姓名对应的学生记录的信息。2.7保存记录到文件功能:把当前单链表中的内容保存到指定的文件中。用 fp=fopen(outfile,wb) 输出打开一个二进制
7、文件,如果没有则建立,则将当前单链 表中的内容保存到指定的文件中。2.8.从文件中读入记录功能:从指定文件中读入记录到单链表中。用 fp=fopen(infile,rb) 打开一个二进制文件,为读方式,并用 while 语句循环读数据 直到文件结尾结束2.9计算所有学生的总分和平均分功能:计算当前单链表中学生的总分和平均成绩。操作 while 语句循环用 s+=p-sum 累加总分,再用 average=(float)s/I 求平均分2.10插入记录到表中功能:插入一条记录到单链表中。用 info=(STUDENT*)malloc(sizeof(STUDENT) 申请空间,且有 scanf 语
8、句输入插入点 学号,并有 printf 语句提示输入记录信息。2.11复制文件功能:复制文件备份。2.12排序功能 :按学生成绩从高到低进行排序。用 while 语句做总分比较。2.13追加记录到文件功能:将当前单链表中的记录追加到指定的文件中 。用 scanf 输入成绩赋给 info-scorei, 在用 s1=s1+info-scorei 。语句循环累加求总分, 再求平均分。操作 fp=fopen(infile, a)向二进制文件尾增加数据方式打开文件。2.14索引功能:按照学号从小到大的顺序排序。用 while 作学号比较,操作 if 判断排序。2.15分类合计功能:按班统计学生成绩操作
9、 while 从学号中取出班级号,并计算班级累加总分、累加平均分、累加班级人 数。第三章、主要数据结构程序设计中用到的学生信息结构体类型typedef struct z1char no11。char n ame15。int scoreN。float sum。float averageint order。struct z1* next。第四章、流程图i*_1ff勺第五章、源代码char no11。char name15。 int scoreN。float sum。float average。int order。struct zl*next。STUDENT 。 STUDENTS ni t()。 S
10、TUDENT*create()。 STUDENT*delete(STUDENT*h) void prin t(STUDENT*h)。void search(STUDENT*h)。 void save(STUDENT*h)。 STUDENT*load()。 void calculatio n(STUDENT*h)。STUDENT*i nsert(STUDENT*h) void append()。void copy()。STUDENT*sort(STUDENT*h)。STUDENT*i ndex(STUDENT*h)。void total(STUDENT*h)。int menu_select()。
11、#include stdio.h/*I/O 函数 */#include stdlib.h/*其他说明*/#i nclude stri ng.h/*字符串函数*/#include conio.h/*屏幕操作函数*/#i nclude mem.h/*内存操作函数*/#in clude ctype.h/*字符操作函数*/#include alloc.h/*动态地址分配函数#defi ne N 3/*定义常数*/typedef struct zl/*定义数据结构*/*/*初始化函数*/*创建链表*/*删除记录*/*显示所有记录*/*查找*/*保存*/*读入数据*/*计算总分和平均分*/。/*插入记录*
12、/*追加记录*/*复制文件*/*排序*/*索引*/*分类合计*/*菜单函数*/* main()int i 。STUDENT*head 。 /* 链表定义头指针 */ head=init() 。/* 初始化链表 */clrscr() 。/* 清屏 */for( 。 ) /* 无限循环 */switch(menu_select() /* 调用主菜单函数,返回整数值做开关语句的条件 /* 值不同,执行的函数不同, break 不能省略 */case 0:head=init() 。 break。 case1:head=create()。 break。/* 执行初始化 */* 创建链表 */* 删除记录
13、 */* 显示全部记录 */* 查找记录 */* 保存文件 */* 读文件 */* 计算总分和平均分 */* 插入记录 */ /* 复制文件 */* 排序 */* 追加记录 */case 12:head=index(head)。 break。/*索引 */case 13:total(head)。 break。/* 分类合计 */case 14:exit(0)。/*如菜单返回值为 14 程序结束 */* 菜单函数,返回值为整数 */menu_select()0.init list,/* 初始化 */1.Enter list,/* 输入记录 */2.Delete a record from lis
14、t, /* 从表中删除记录 */3.print list,/* 显示单链表中所有记录 */* 将单链表中记录保存到文件中 */* 从文件中读入记录 */* 计算所有学生的总分和平均分 */* 插入记录到表中 */9.copy the file to new file, /* 复制文件 */ 10.sort tomake new file, /* 排序 */主函数开始 */*/case 2:head=delete(head)。 break。case 3:print(head)。break。case 4:search(head)。 break。case 5:save(head)。 break。ca
15、se 6:head=load()。 break。case 7:calculation(head)。 break。case 8:head=insert(head)。 break。case 9:copy()。 break。case 10:head=sort(head)。 break。case 11:append()。 break。*MENU*, /*定义菜单字符串数组 */4.Search record on name,/* 按照姓名查找记录 */5.Save the file,6.Load the file,pute the score,8.insert record to list,print
16、f(press any key enter menu.n) 。 /* 按任意键进入主菜单 */ /* 输入任意键 */* 清屏 */* 移动光标 */* 设置文本显示颜色为黄色 */* 设置背景颜色为蓝色 */* 移动光标 */*输出左上角边框厂*/* 输出上边框水平线 */*输出右上角边框*/ doprintf(n Tang Yubao Program:n) 。printf(n Enter you choice(014):) 。/*在菜单窗口外显示提示信息 */scanf(%s,s) 。c=atoi(s) 。 while(c14) 。 return c 。/* 输入选择项 */* 将输入的字
17、符串转化为整型数 */* 选择项不在 014 之间重输 */* 返回选择项,主程序根据该数调用相应的函数 */11.append record to file, /* 追加记录到文件中 */12.index on number,/* 索引 */13.total on number,/* 分类合计 */14.Quit 。/* 退出 */char s3 。int c,i 。/* 以字符形式保存选择号 */* 定义整形变量 */gotoxy(1,25) 。/* 移动光标getch() 。clrscr() 。gotoxy(1,1) 。textcolor(YELLOW) 。textbackground(
18、BLUE) 。gotoxy(10,2) 。putch(0 xc9) 。for(i=1。i44。i+)putch(0 xcd) 。putch(0 xbb) 。for(i=3 。 i20 。 i+)gotoxy(10,i) 。 putch(0 xba) 。/* 输出左垂直线 */putch(0 xba) 。gotoxy(54,i) 。gotoxy(10,20) 。for(i=1 。 i44。 i+)putch(0 xcd) 。putch(0 xbc) 。window(11,3,53,19) 。clrscr() 。for(i=0 。 ino,11) 。 /* 输入学号并校验 */ if(info-n
19、o0=) break 。 /* 如果学号首字符为 则结束输入 */ inputs(enter name:,info-name,15) 。 /* 输入姓名,并进行校验 */ printf(please input %d score n,N) 。 /* 提示开始输入成绩 */ s=0 。 /* 计算每个学生的总分,初值为 0*/for(i=0。iscorei) 。/* 输入成绩 */if(info-scorei100|info-scoreiscorei100|info-scoreiscorei 。info-sum=s 。info-average=(float)s/N 。info-order=0 。
20、info-next=h 。h=info 。/* 累加各门课程成绩 */* 将总分保存 */* 求出平均值 */* 未排序前此值为 0*/* 将头结点作为新输入结点的后继结点 */ /* 新输入结点为新的头结点 */inputs(char*prompt,char*s,int count)char p255 。doprintf(prompt) 。 /* 显示提示信息 */scanf(%s,p) 。/* 输入字符串 */if(strlen(p)count)printf(n too long!n) 。 /* 进行长度校验,超过count 值重输 */while(strlen(p)count) 。str
21、cpy(s,p)。void print(STUDENT*h)int i=0 。STUDENT*p 。clrscr() 。 p=h。printf(nnn* *STUDENT *n)printf(|rec|no | name | sc1 | sc2 | sc3 | sum | ave |order|n) 。 printf(|-| | | | | | | | |n) 。while(p!=NULL)i+ 。printf(|%3d|%-10d|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,i,p-no,p-name,p-score0,p-score1,p-score2,p-su
22、m,p-average,p-order) 。p=p-next 。/* 删除记录 */STUDENT*delete(STUDENT*h)STUDENT *p,*q 。char s11 。clrscr() 。/*p 为查找到要删除的结点指针, q 为其前驱指针 */* 存放学号 */* 清屏 */printf(please input deleted no.n) 。 /* 显示提示信息 */scanf(%s,s) 。q=p=h 。/* 输入要删除记录的学号 */* 给 q 和 p 赋初值头指针 */while(strcmp(p-no,s)&p!=NULL) /* 当记录的学号不是要找的,或
23、指针不为空时 */q=p 。 p=p-next 。if(p=NULL)/* 将 p 指针值赋予 q 作为 p 的前驱指针 */* 将 p 指针指向下一条记录 */* 如果 p 为空,说明链表中没有该结点 */*将输入的字符串复制到字符串s 中*/* 统计记录条数 */* 移动指针 */* 清屏 */* 初值为头指针 */printf(*end*n)printf(nlist no %s studentn,s) 。else /*p 不为空,显示找到的记录信息 */printf(|no | name | sc1|sc2|sc3| sum | ave |order|n) 。printf(|- |-|-
24、 |-|- |- |-|- |n)printf(|%-10s|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,p-no,p-name, p-score0,p-score1, p-score2,p-sum,p-average,p-order) 。/* 按任意键后,开始删除 */* 如果 p=h, 说明被删结点是头结点 */* 修改头指针指向下一条记录 */q-next=p-next 。free(p) 。/* 不是头指针,将 p 的后继结点作为 q 的后继结点 */ /* 释放 p 所指结点空间 */printf(n have deleted No %s studentn,
25、s) 。printf(Dont forget save!n) 。 /* 提示删除后不要忘记保存文件 */ return(h) 。 /* 返回头指针 */* 查找记录 */ void search(STUDENT*h)STUDENT*p 。 /* 移动指针 */char s15 。/* 存放姓名的字符数组 */clrscr() 。/* 清屏 */printf(please enter name for searchn) 。scanf(%s,s) 。 /* 输入姓名 */p=h。/* 将头指针赋予 p*/while(strcmp(p-name,s)&p!=NULL) /* 当记录的姓名不是
26、要找的,或指针不为空时 */p=p-next 。 /* 移动指针,指向下一结点 */if(p=NULL)/* 如果 p 为空 */printf(nlist no. %s studentn,s) 。/* 显示没有该学生 */else/* 显示找到的记录信息 */printf(|no. | name | sc1|sc2|sc3| sum | ave |order|n) 。printf(|- |-|- |-|- |-|- |- |n) 。printf(|%-10s|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,p-no,p-name, p-score0,p-score1,
27、p-score2,p-sum,p-average,p-order) 。printf(*have found*n)printf(H*end*n)getch() 。if(p=h)h=p-next 。elseprintf(nn*have found*n)/* 插入记录 */printf(H*end*n)STUDENT *insert(STUDENT*h)STUDENT*p,*q,*info 。 /*p 指向插入位置, q 是其前驱, info 指新插入记录 */ char s11 。/* 保存插入点位置的学号 */int s1,i 。printf(please enter location befo
28、re the no.n) 。 scanf(%s,s) 。 /* 输入插入点学号 */printf(nplease input new recordn) 。 /* 提示输入记录信息 */info=(STUDENT*)malloc(sizeof(STUDENT) 。/* 申请空间 */if(!info)* *liu285*printf(nout of memory) 。return NULL 。inputs(enter no.:,info-no,11) 。inputs(enter name:,info-name,15) 。printf(please input %d score n,N) 。s1=
29、0。/for(i=0。iscorei) 。if(info-scorei100|info-scoreiscorei100|info-scoreiscorei 。/* 计算总分 */info-sum=s1。info-average=(float)s1/N 。info-order=0。info-next=NULL 。h=info 。/* 将总分存入新记录中 */* 计算均分 */* 名次赋值 0*/* 设后继指针为空 */* 将指针赋值给 p*/* 将指针赋值给 q*/* 查找插入位置 */* 保存指针 p ,作为下一个 p 的前驱 */* 将指针 p 后移 */* 如果 p 指针为空,说明没有指定
30、结点 */*同时 p 等于 h,说明链表为空*/* 新纪录为头结点 */*p 为空,但 p 不等于 h,将新结点插在表尾*/*p 不为空,则找到了指定结点 */*如果 p 等于 h,则新结点插入在第一个结点之前*/* 新结点为新的头结点 */scanf(%s,outfile) 。/*从文件读取数据 */STUDENT*load()* *liu286*elseinfo-next=p 。q-next=info 。/*不是头结点,则是中间某个位置,新结点的后继结点为p*/* 新结点作为 q 扥后继结点 */printf(n- have inserted %s student- n,info-name
31、) 。printf(-Dont forget save-n)。/* 提示存盘 */return(h) 。/* 返回头指针 */* 保存数据到文件 */void save(STUDENT*h)FILE*fp 。STUDENT*p 。char outfile10 。/* 定义指向文件的指针 */* 定义移动指针 */* 保存输出文件名 */printf(Enter outfile name,for example c:f1te.txt:n)/*提示文件名格式信息*/elseq-next=info 。elseif(p=h)info-next=p 。if(fp=fopen(outfile,wb)=NU
32、LL)printf(can not open filen) 。exit(1) 。printf(nSaving file.n)。p=h 。while(p!=NULL)fwrite(p,sizeof(STUDENT),1,fp)p=p-next 。fclose(fp) 。printf(- save success!- n)/* 为输出打开一个二进制文件,如没有则建立/*打开文件,提示正在保存 */* 移动指针从头指针开始 */*如 p 不为空 */。/* 写入一条记录 */*指针后移*/* 关闭文件 */*显示保存成功*/*/STUDENT *p,*q,*h=NULL 。 /* 定义记录指针变量
33、*/FILE*fp 。 /* 定义指向文件的指针 */ char infile10 。 /* 保存文件名 */printf(Enter infile name,for example c:f1te.txt:n)scanf(%s,infile) 。if(fp=fopen(infile,rb)=NULL)/* 输入文件名 */* 打开一个二进制文件 ,为读方式 */printf(can not open filen) 。exit(1) 。printf(n- loading file!- n)/* 如不能打开 ,则结束程序 */p=(STUDENT*)malloc(sizeof(STUDENT)/*
34、 申请空间 */if(!p)printf(out of memory!n) 。 /* 如没有申请到,则内存溢出 */ return h 。/* 返回空头指针 */ h=p 。 while(!feof(fp)if(1!=fread(p, sizeof(STUDENT), 1, fp)break 。/* 如果没有读到数据,跳出循环 */p-next=(STUDENT*)malloc(sizeof(STUDENT) 。 /* 为下一个结点申请空间 */if(!p-next)printf(out of memory!n) 。 /* 如果没有申请到,则内存溢出 */return h 。q=p 。p=p-
35、next 。q-next=NULL 。fclose(fp) 。/* 保存当前结点的指针,作为下一结点的前驱 */* 指针后移,新读入数据链到当前表尾*/* 最后一个结点的后继指针为空 */ /*关闭文件 */printf(-Yon have success read data from file !-n)return h。/* 返回头指针 */* 追加记录到文件 */void append ()FILE*fp 。STUDENT*info 。int s1,i 。char infile10 。/* 定义指向文件的指针 */* 新纪录指针 */* 保存文件名 */printf(nplease new
36、 recordn) 。info=(STUDENT*)malloc (sizeof(STUDENT) 。 /* 申请空间 */ if(!info)printf(nout of memory) 。 /* 没有申请到,内存溢出本函数结束 */ return 。inputs (enter no:, info-no,11) 。 /* 调用 inputs 输入学号 */ inputs (enter name:,info-name,15) 。 /*调用 inputs 输入姓名 */ printf (please input %d score n,N) 。 /* 提示输入成绩 */ s1=0。for(i=0。
37、iscorei) 。if(info-scorei100|info-scoreiscorei100|info-scoreiscorei 。info-sum=s1 。info-average=(float)s1/N 。 info-order=0 。 info-next=NULL 。printf(Enter infile name,for example c:f1te.txt:n)。scanf(%s,infile) 。/* 输入文件名 */if(fp=fopen(infile,ab)=NULL)/* 向二进制文件尾增加数据方式打开文件 */printf(can not open filen) 。/*
38、 显示不能打开 */exit(1) 。/* 退出程序 */printf(n-Appending record!-n)。if(1!=fwrite(info,sizeof(STUDENT),1,fp) /* 写文件操作 */ printf(-file write error!-n)/* 返回 */printf(- append success!-n) 。fclose(fp) 。/* 关闭文件 */* 文件复制 */void copy()char outfile10,infile10 。/* 保存总分 */* 求平均分 */* 名次初始值为 0*/return 。q=p。p=p-next 。/* 待
39、排序结点值小,则新表指针后移 */printf(Enter infile name,for example c:f1te.txtn) 。 scanf(%s,infile) 。 /* 输入源文件名 */if(sfp=fopen(infile,rb)=NULL) /* 二进制读方式打开源文件 */printf(can not open input filen) 。 exit(0) 。printf(Enter outfile name, for example c:f1te.txt:n) 。 /* 提示输入目标文件名 */scanf(%s,outfile) 。 /* 输入目标文件名 */ if(tf
40、p=fopen(outfile,wb)=NULL) /* 二进制写方式打开源文件 */printf(can not open output filen) 。exit(0) 。while(!feof(sfp) /* 读文件直到文件尾 */if(1!=fread(p,sizeof(STUDENT),1,sfp) break 。/* 块读 */fwrite(p,sizeof(STUDENT),1,tfp) 。/* 块写 */fclose(sfp) 。 fclose(tfp) 。 /* 关闭目标文件 */ printf(you have success copy file!n) 。 /* 显示成功复制
41、 */*排序 */ STUDENT*sort(STUDENT*h)int i=0 。 /* 保存名次 */while(t-sumsum&p!=NULL)FILE*sfp,*tfp 。STUDENT *p=NULL 。clrscr() 。/* 源和目标文件指针 */* 移动指针 */* 清屏 */STUDENT*p,*q,*t,*h1h1=h-next 。h-next=NULL 。while(h1!=NULL) t=h1 。h1=h1-next 。p=h 。q=h 。/* 第一个结点为新表的头结点*/* 当原表不为空时,进行排序*/* 取原表的头结点 */* 原表头结点指针后移 */*设
42、疋移动指针 p,从头指针开始*/*设定移动指针 q 作为 p 的前驱,初值为头指针 */* 定义临时指针 */* 将原表的头指针所指的下一个结点作头指针 */*计算总分和均值 */* 累加总分 */* 统计记录条数 */* 指针后移 */* 求均分,均分为浮点数,总分为整数,所以做类型转换 */printf(n-All students sum score is:%ld average is %5.2fn,s,average) 。/*索引 */STUDENT*index(STUDENT*h)STUDENT *p,*q,*t,*h1 。/*定义临时指针 */h1=h-next 。/* 将原表的头
43、指针所指的下一个结点做指针 */if(p=q)t-next=p 。h=t 。/*p=q, 说明待排序结点值大,应排在首位 */* 待排序结点的后继结点为 p*/* 新头结点为待排序结点 */elset-next=p 。q-next=t 。p=h。while(p!=NULL)i+ 。/*待排序结点应插入在中间某个位置q 和 p 之间,如 p 为空则是尾部*/*t 的后继结点是 p*/ /*q的后继结点是 t*/*已排好序的头指针赋予p,准备填写名次*/* 当 p 不为空时,进行下列操作 */p-order=i 。p=p-next 。printf(sort success!n) 。return h
44、 。/* 结点序号 */* 将名次赋值 */* 指针后移 */* 排序成功 */* 返回头指针 */void calculation(STUDENT*h)STUDENT*p 。int i=0 。long s=0 。float average=0 。 p=h 。while(p!=NULL)/* 定义移动指针 */* 保存记录条数初值为 0*/* 总分初值为 0*/* 均分初值为 0*/* 从头指针开始 */* 当 p 不为空时处理 */s+=p-sum 。i+ 。 p=p-next 。average=(float)s/i 。printf( -class- sum- average- n)p=h。
45、/*从头指针开始 */while(p!=NULL) /* 当 p 不为空时做下面的处理 */memcpy(sno,p-no,8) 。/* 从学号中取出班级号 */sno8=0 。q=p-next 。s1=p-sum 。ave=p-average。/* 作字符串结束标记 */*将指针指向待比较的记录 */* 当前班级的总分初值为该班级的第一条记录总分*/* 当前班级的均分初值为该班级的第一条记录均分*/h-next=NULL 。while(h1!=NULL)t=h1 。h1=h1-next 。p=h。/* 第一个结点为新表的头结点 */ /*当原表不为空时,进行排序 */* 取原表的头结点 */
46、* 原表头结点指针后移 */*设定移动指针 p,从头指针开始*/q=h。/*设定移动指针 q 作为 p 的前缀结点,初值为头指针*/while(strcmp(t-no,p-no)0&p!=NULL) /* 做学号比较 */q=p。/*带排序结点值大,应往后插,所以新表指针后移 */p=p-next 。if(p=q)/*p=q, 说明待排序结点值小,应排在首位 */t-next=p 。/*待排序结点的后继结点为 p*/h=t 。/* 新头结点为待排序结点 */else/* 待排序结点应插入在中间某个位置q 和 p 之间,若 p 为空则是尾部*/t-next=p 。q-next=t 。/*
47、t 的后继结点是 p*/ /*q的后继结点是 t*/printf(index success!n) 。return h 。/* 返回头指针 */*索引排序成功 */* 分类指针 */void total(STUDENT *h)STUDENT *p,*q 。/*定义临时指针变量 */char sno9,qno9,*ptr 。/* 保存班级号 */float s1,ave 。/* 保存总分和平均分 */int i 。 /* 保存班级人数 */ clrscr() 。 /* 清屏 */printf(“*TOTAL*/* 统计当前班级人数 */* 内循环开始 */s1+=q-sum 。 /* 累加总分 */ ave+=q-average 。 /* 累加均分 */ i+ 。 /* 累加班级人数 */ q=q-next 。 /* 指针指向下一记录 */elsebreak。/* 不是一个班级的结束本次循环 */printf(%s,%10.2f,%5.2fn,sno,s1,ave/i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年沈阳市皇姑区公务员人员招聘笔试备考题库与答案详解
- 岳池县人民医院2027年度公开招聘工作人员(24人)笔试模拟试题及答案解析
- 2026上海复旦大学药学院全球公共政策研究院招聘1名助理教授B笔试备考试题及答案解析
- 2026年江苏省徐州市公务员人员招聘笔试试题与答案详解
- 2026年安阳市文峰区事业单位人员招聘笔试试题与答案详解
- 2026年云南省临沧市事业单位人员招聘笔试试题与答案详解
- 2026年连云港市海州区公务员人员招聘笔试参考试题与答案详解
- 自贡市公交集团有限责任公司吉兴公司新媒体营销管理员招聘(1人)考试备考试题及答案解析
- 2027桂林医科大学第一附属医院公开招聘工作人员考试备考试题及答案解析
- 2026年北海市银海区公务员人员招聘笔试参考试题与答案详解
- 2026哔哩哔哩营销通案
- 广东深圳市华睿欣能投资控股集团有限公司2026届校园招聘考试参考题库及答案解析
- 基于零知识证明的医疗数据共享安全协议
- 老年期痴呆课件
- 20大数据互联网金融电子商务创业项目营销活动推广模板
- 3.1伟大的改革开放 教案高中政治统编版必修一中国特色社会主义
- 羟考酮纳洛酮缓释片-临床用药解读
- DBJT15-60-2019 建筑地基基础检测规范
- 2025年晋江离婚协议书
- 药店医保处方管理制度
- 信息处理与社会责任试题及答案
评论
0/150
提交评论