收藏 分销(赏)

成绩管理系统V6.0.doc

上传人:w****g 文档编号:4131123 上传时间:2024-07-31 格式:DOC 页数:14 大小:98.04KB
下载 相关 举报
成绩管理系统V6.0.doc_第1页
第1页 / 共14页
成绩管理系统V6.0.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述
Harbin Institute of Technology C语言实验大作业 课程名称: C语言程序设计 报告类型: 程序设计报告 实验题目: 学生成绩管理系统v6。0 实验类型: (综合设计型/创新研究型) 所在院系: 航天学院电子信息类 学生类别: 本科生 指导教师: 郭萍 学生姓名: 王福海 班级和学号: 电子信息五班 1162100527 实验时间: 2017。5.20 成绩评定: 哈尔滨工业大学 1 实验目的 将教材中所包含的内容系统化考察,考察一维、二维数组,函数的调用,排序、查找、统计分析等常用算法,指针,动态数组以及结构体的应用。 2 实验内容和要求 1。实验内容 学生成绩管理系统V6。0。某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。 2。实验要求 采用自顶向下、逐步求精的模块化设计思想设计小型数据库管理系统,对学生成绩进行管理.要求按系统的需求分析、系统设计(总体设计、各个模块的设计)、系统实现(各个模块的实现)、系统测试等过程组织报告内容,说明采用了什么数据结构和算法,遇到哪些问题,这些问题是如何解决的,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会. 3.系统功能需求分析 本系统主要实现下面的功能: (1)录入每个学生的学号和考试成绩; (2)计算每门课程的总分和平均分; (3)计算每个学生的总分和平均分; (4) 按成绩由高到低排出名次表; (5) 按成绩由低到高排出名次表; (6) 按学号由小到大排出成绩表; (7) 按姓名字典的排序排出成绩表; (8) 按学号查询学生排名及其考试成绩; (9) 按姓名查询学生排名及其考试成绩; (10) 按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比; (11) 输出每个学生学号姓名各科成绩及每门考试的总分平均分; (12) 将每个学生信息写入文件; (13) 从文件中读取每个学生信息并显示; 4。实验环境 采用win10操作系统,使用软件Dev-c++。 3 系统设计 1. 系统功能模块划分 学生成绩管理系统 按姓名排序 按学号排序 录 入 成 绩 录入文件读取文件 标 准 分 析 排 名 排 序 计算总分平均分 按学生成绩排名 每个学生 每门课 五个档次 2。 主要算法 排序:进行学生成绩的排序从而出现排名表 查找:通过多种方式如学号,姓名查找特定学生的成绩 3.数据结构 输出每个学生学号姓名各科成绩及每门考试的总分平均分 按成绩由高到低排出名次表 计算每个学生的总分和平均分 计算每门课程的总分和平均分 录入每个学生的学号和考试成绩 按成绩由低到高排出名次表 按姓名字典的排序排出成绩表 按学号查询学生排名及其考试成绩 按姓名查询学生排名及其考试成绩 5个类别,统计每个类别的人数以及所占的百分比 按学号由小到大排出成绩表 将每个学生信息写入文件从文件中读取每个学生信息并显示 退出 用户输入指令 4.各模块(函数)的功能和接口设计: 序号 函数名 函数功能 函数参数 1 Menu 显示菜单获得输入的选项 无 2 Readscore 录入学生信息 STU stu[], m,n 3 Aversumofeverystudent 计算每个学生总成绩平均值 STU stu[], m,n 4 Aversumofeverycourse 计算每门课程总成绩平均成绩 STU stu[], m,n 5 Sortbyscore 按成绩排序 STU stu[], m,n 6 Ascending 升序 floata,b 7 Descending 降序 floata,b 8 Assortbynum 按学号排序 STU stu[], m,n 9 Sortbyname 按姓名排序 STU stu[], m,n 10 Searchbynum 按学号查询学生信息 STU stu[], m,n 11 Searchbyname 按姓名查询学生信息 STU stu[], m,n 12 StatisticAnlysis(STU stu[], int n, int m) 分析学生成绩五个分数段所占百分比 STU stu[], m,n 13 PrintScore 打印输出学生成绩 STU stu[], m,n 14 WritetoFile 写入程序 D盘student.txt STU stu[], m,n 15 ReadfromFile 读取文件 STU stu[], m,n 4 系统实现 1.系统的总流程图: 显示菜单—-〉输入用户的选择--〉根据用户的输入选择不同的操作 case 1: Readscore(stu,n,m); break; case 2: Aversumofeverystudent(stu ,n,m); break; case 3: Aversumofeverycourse(stu ,n,m); break; case 4: Sortbyscore(stu ,n,m,Descending); printf(”\n成绩降序排序\n”); Printscore( stu ,n, m); break; case 5: Sortbyscore(stu ,n,m,Ascending); printf("\n成绩升序排序\n"); Printscore( stu ,n, m); break; case 6: Assortbynum( stu , n, m); printf(”\n学号升序排序\n”); Printscore( stu ,n, m); break; case 7: Sortbyname( stu , n, m); printf("\n姓名升序排序\n”); Printscore( stu ,n, m); break; case 8: Searchbynum( stu , n, m); break; case 9: Searchbyname( stu , n, m); break; case 10: StatisticAnlysis( stu , n, m); break; case 11: Printscore( stu ,n, m); break; case 12: Writetofile(stu,n,m); break; case 13: Readfromfile(stu,&n,&m); break; case 0: printf(”End of program!\n”); exit(0); 2. 程序的全部源代码: 1 #include <stdio.h〉 2 #include 〈stdlib。h〉 3 #include 〈string。h〉 4 typedef struct student 5 { 6 long num; 7 char name[10]; 8 float score[6]; 9 float sum; 10 float aver; 11 }STU; 12 int Menu(void); 13 void ReadScore(STU stu[],int n, int m); 14 void AverSumofEveryStudent(STU stu[],int n,int m); 15 void AverSumofEveryCourse(STU stu[],int n,int m); 16 void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); 17 int Ascending(float a,float b); 18 int Descending(float a,float b); 19 void SwapFloat(float *x,float *y); 20 void SwapLong(long *x,long *y); 21 void SwapChar (char x[],char y[]); 22 void AsSortbyNum(STU stu[],int n,int m); 23 void SortbyName(STU stu[],int n,int m); 24 void SearchbyNum(STU stu[],int n,int m); 25 void SearchbyName(STU stu[],int n,int m); 26 void StatisticAnalysis(STU stu[],int n,int m); 27 void PrintScore(STU stu[],int n,int m); 28 void WritetoFile(STU stu[],int n,int m); 29 void ReadfromFile(STU stu[],int *n,int *m); 30 int main() 31 { 32 char ch; 33 int n=0,m=0; 34 STU stu[30]; 35 printf(”Input student number:(less than 30)\n"); 36 scanf(”%d”,&n); 37 printf("Input course number:(less than 6)\n”); 38 scanf("%d",&m); 39 while(1) 40 { 41 ch = Menu(); 42 switch(ch) 43 { 44 case 1: ReadScore(stu,n,m); 45 break; 46 case 2: AverSumofEveryCourse(stu,n,m); 47 break; 48 case 3: AverSumofEveryStudent(stu,n,m); 49 break; 50 case 4: SortbyScore(stu,n,m,Descending); 51 printf(”\nSort in descending order by score:\n"); 52 PrintScore(stu,n,m); 53 break; 54 case 5: SortbyScore(stu,n,m,Ascending); 55 printf("\nSort in ascending order by score:\n”); 56 PrintScore(stu,n,m); 57 break; 58 case 6: AsSortbyNum(stu,n,m); 59 printf(”\nSort in ascending order by number:\n”); 60 PrintScore(stu,n,m); 61 break; 62 case 7: SortbyName(stu,n,m); 63 printf("\nSort in dictionary order by name:\n"); 64 PrintScore(stu,n,m); 65 break; 66 case 8: SearchbyNum(stu,n,m); 67 break; 68 case 9: SearchbyName(stu,n,m); 69 break; 70 case 10:StatisticAnalysis(stu,n,m); 71 break; 72 case 11:PrintScore(stu,n,m); 73 break; 74 case 12:WritetoFile(stu,n,m); 75 break; 76 case 13:ReadfromFile(stu,&n,&m); 77 break; 78 case 0: printf(”End of program!\n"); 79 exit(0); 80 default:printf(”Input error!\n”); 81 } 82 } 83 return 0; 84 } 85 /*Menu:显示菜单并获得用户键盘输入的选项 */ 86 int Menu(void) 87 { 88 int a; 89 printf("Management for Students’scores\n"); 90 printf(”1.Input record\n”); 91 printf(”2。Caculate total and average score of every course\n"); 92 printf(”3。Caculate total and average score of every student\n"); 93 printf(”4.Sort in descending order by score\n”); 94 printf(”5。Sort in ascending order by score\n”); 95 printf("6.Sort in ascending order by number\n”); 96 printf(”7。Sort in dictionary order by name\n"); 97 printf(”8.Search by number\n”); 98 printf("9。Search by name\n"); 99 printf("10。Statistic analysis\n”); 100 printf(”11.List record\n"); 101 printf(”12。Write to a file\n”); 102 printf(”13.Read from a file\n"); 103 printf(”0.Exit\n”); 104 printf(”Please Input your choice:"); 105 scanf(”%d”,&a); 106 return a; 107 } 108 /*input:输入每个学生每门课的成绩*/ 109 void ReadScore(STU stu[],int n,int m) 110 { 111 int i,j,k; 112 printf("Input student's ID,name and score:\n”); 113 for(i=0;i〈n;i++) 114 { 115 scanf(”%ld %s”,&stu[i]。num,stu[i]。name); 116 for(j=0;j〈m;j++) 117 { 118 scanf("%f”,&stu[i]。score[j]); 119 } 120 } 121 } 122 /* AverSumofEveryStudent:计算每个学生每门课的总分和平均分*/ 123 void AverSumofEveryStudent(STU stu[],int n,int m) 124 { 125 int i,j; 126 for(i=0;i〈n;i++) 127 { 128 stu[i].sum = 0; 129 for(j=0;j〈m;j++) 130 { 131 stu[i].sum = stu[i].sum + stu[i].score[j]; 132 } 133 stu[i]。aver = m>0 ? stu[i]。sum/m:—1; 134 printf(”student %d: sum=%.0f,aver=%。0f\n”,i+1,stu[i].sum,stu[i]。aver); 135 } 136 } 137 /*AverSumofEveryCourse:计算每门课程的总分和平均分*/ 138 void AverSumofEveryCourse(STU stu[],int n,int m) 139 { 140 int i,j; 141 float sum[6],aver[6]; 142 for(j=0;j〈m;j++) 143 { 144 sum[j] = 0; 145 for(i=0;i〈n;i++) 146 { 147 sum[j]=sum[j]+stu[i]。score[j]; 148 } 149 aver[j] = n〉0?sum[j]/n : -1; 150 printf("course %d:sum=%。0f,aver=%.0f\n”,j+1,sum[j],aver[j]); 151 } 152 } 153 /* SortbyScore:将每个学生按总成绩排序*/ 154 void SortbyScore(STU stu[],int n, int m,int(*compare)(float a,float b)) 155 { 156 int i,j,k,t; 157 for(i=0;i〈n-1;i++) 158 { 159 k=i; 160 for(j=i+1;j〈n;j++) 161 { 162 if((*compare)(stu[j]。sum,stu[k].sum)) 163 k=j; 164 } 165 if(k!=i) 166 { 167 for(t=0;t<m;t++) 168 { 169 SwapFloat(&stu[k]。score[t],&stu[i].score[t]); 170 } 171 SwapFloat(&stu[k]。sum,&stu[i].sum); 172 SwapFloat(&stu[k]。aver,&stu[i].aver); 173 SwapLong(&stu[k]。num,&stu[i]。num); 174 SwapChar(stu[k]。name,stu[i]。name); 175 } 176 } 177 } 178 /* Ascending:按照升序*/ 179 int Ascending(float a,float b) 180 { 181 return a〈b; 182 } 183 /* Descending:按照降序 */ 184 int Descending(float a,float b) 185 { 186 return a〉b; 187 } 188 /* SwapFloat:交换单精度浮点型数据 */ 189 void SwapFloat(float *x,float *y) 190 { 191 float temp; 192 temp = *x; 193 *x = *y; 194 *y = temp; 195 } 196 /* SwapLong交换长整形数据 */ 197 void SwapLong(long *x,long *y) 198 { 199 long temp; 200 temp = *x; 201 *x = *y; 202 *y = temp; 203 } 204 /* SwapChar交换字符型数据 */ 205 void SwapChar(char x[],char y[]) 206 { 207 char temp[10]; 208 strcpy(temp,x); 209 strcpy(x,y); 210 strcpy(y,temp); 211 } 212 /* AsSortbyNum:将学生按照学号顺序排列 */ 213 void AsSortbyNum(STU stu[],int n,int m) 214 { 215 int i,j,k,t; 216 for(i=0;i<n—1;i++) 217 { 218 k=i; 219 for(j=i+1;j<n;j++) 220 { 221 if(stu[j]。num<stu[k].num) 222 k=j; 223 } 224 if(k!=i) 225 { 226 for(t=0;t〈m;t++) 227 { 228 SwapFloat(&stu[k]。sum,&stu[i].sum); 229 } 230 SwapFloat(&stu[k].sum,&stu[i]。sum); 231 SwapFloat(&stu[k]。aver,&stu[i]。aver); 232 SwapLong(&stu[k].num,&stu[i]。num); 233 SwapChar(stu[k].name,stu[i].name); 234 } 235 } 236 } 237 /* SortbyName:将学生按照字典顺序排列 */ 238 void SortbyName(STU stu[],int n,int m) 239 { 240 int i,j,t; 241 for(i=0;i<n—1;i++) 242 { 243 for(j=i+1;j〈n;j++) 244 { 245 if(strcmp(stu[j]。name,stu[i].name)<0) 246 { 247 for(t=0;t〈m;t++) 248 { 249 SwapFloat(&stu[i].score[t],&stu[j]。score[t]); 250 } 251 SwapFloat(&stu[i]。sum,&stu[j].sum); 252 SwapFloat(&stu[i]。aver,&stu[j]。aver); 253 SwapLong(&stu[i]。num,&stu[j]。num); 254 SwapChar(stu[i].name,stu[j].name); 255 } 256 } 257 } 258 } 259 /* SearchbyNum:按学号查找并打印学生成绩 */ 260 void SearchbyNum(STU stu[],int n,int m) 261 { 262 long number; 263 int i,j; 264 printf("Input the number you want to search"); 265 scanf(”%ld”,&number); 266 for(i=0;i<n;i++) 267 { 268 if(stu[i].num == number) 269 { 270 printf("%ld\t%s\t",stu[i]。num,stu[i]。name); 271 for(j=0;j〈m;j++) 272 { 273 printf("%。0f\t”,stu[i].score[j]); 274 } 275 printf(”%。0f\t%.0f\n”,stu[i]。sum,stu[i].aver); 276 return; 277 } 278 } 279 printf(”\nNot found! \n"); 280 } 281 /* SearchbyName:按名字查找并打印学生成绩 */ 282 void SearchbyName(STU stu[],int n,int m) 283 { 284 char x[10]; 285 int i,j; 286 printf(”Input the name you want to search”); 287 scanf("%s",x); 288 for(i=0;i<n;i++) 289 { 290 if(strcmp(stu[i]。name,x)==0) 291 { 292 printf("%ld\t%s\t”,stu[i].num,stu[i]。name); 293 for(j=0;j〈m;j++) 294 { 295 printf(”%.0f\t",stu[i]。score[j]); 296 } 297 printf("%。0f\t%.0f\n”,stu[i].sum,stu[i].aver); 298 return; 299 } 300 } 301 printf(”\nNot found!\n”); 302 } 303 /* StatisticAnalysis:统计各分段的学生及其所占百分比 */ 304 void StatisticAnalysis(STU stu[],int n,int m) 305 { 306 int i,j,total,t[6]; 307 for(j=0;j〈m;j++) 308 { 309 printf(”For course %d:\n”,j+1); 310 memset(t,0,sizeof(t)); /*将数组t的元素全部初始化为0*/ 311 for(i=0;i〈n;i++) 312 { 313 if(stu[i].score[j]〉=0&&stu[i]。score[j]<60) t[0]++; 314 else if(stu[i]。score[j]<70) t[1]++; 315 else if(stu[i]。score[j]〈80) t[2]++; 316 else if(stu[i].score[j]〈90) t[3]++; 317 else if(stu[i].score[j]<100) t[4]++; 318 else if(stu[i].score[j]==100) t[5]++; 319 } 320 for(total=0,i=0;i〈=5;i++) 321 { 322 total=total+t[i]; 323 } 324 for(i=0;i〈=5;i++) 325 { 326 if(i==0) 327 printf(”<60\t%d\t%.2f%%\n”,t[i],(float)t[i]/n*100); 328 else if(i==5) 329 printf("%d\t%d\t%。2f%%\n", (i+5)*10,t[i],(float)t[i]/n*100); 330 else 331 printf("%d-%d\t%d\t%。2f%%\n”,(i+5)*10,(i+5)*10+9,t[i],(float)t[i]/n*100); 332 } 333 } 334 } 335 /* PrintScore:打印输出学生成绩 */ 336 void PrintScore(STU stu[],int n,int m) 337 { 338 int i,j; 339 for(i=0;i〈n;i++) 340 { 341 printf("%ld\t%s\t”,stu[i]。num,stu[i]。name); 342 for(j=0;j<m;j++) 343 { 344 printf("%。0f\t",stu[i]。score[j]); 345 } 346 printf("%。0f\t%。0f\n”,stu[i]。sum,stu[i]。aver); 347 } 348 } 349 /* WritetoFile:写入程序 student.txt */ 350 void WritetoFile(STU stu[],int n,int m) 351 { 352 FILE *fp; 353 int i,j; 354 if((fp=fopen(”student.txt”,"w”)) == NULL) 355 { 356
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服