《班级成绩管理系统》C语言课程设计_第1页
《班级成绩管理系统》C语言课程设计_第2页
《班级成绩管理系统》C语言课程设计_第3页
《班级成绩管理系统》C语言课程设计_第4页
《班级成绩管理系统》C语言课程设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

班级成绩管理系统班级成绩管理系统C C 语言课程设计语言课程设计 目目录录 一、设计要求 3 二、设计目的3 三、课题分析3 四、具体设计过程3 4.1、定义数据结构及相关解释3 4.2、软件的模块划分4 4.3、程序流程设计4 4.4、各功能模块编写内容详细情况及调试6 4.5、源程序内容及调试结果7 4.6、用到的库函数简介21 五、实习心得体会21 六、参考文献22 班级成绩管理系统 一、一、 要求要求 (1)收集资料,全面分析课题,分解问题,形成中体编程思路; (2)深入分析各个小问题,编写个部分程序模块; (3)对于设计中用到的关键函数,要联系实际 问题进行具体介绍; (4)上机调试,确保程序能正确运行; 二、二、 设计目的设计目的 (1) 熟悉 c 语言的编译连接和运行过程。 (2)掌握 c 语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们 赋值。 (3)掌握 if 语句及 switch 语句的运用方法及嵌套应用方法。 (4)掌握实现循环结构的三种语句 while、 do-while.、for 的使用。 (5)掌握函数的定义方法和调用方法。 (6)能够采用模块化思想调试程序。 三、三、 课题分析:课题分析: 对一个有 N 个学生的班级,每个学生有 M 门课程。该系统实现对班级成绩的录入、显 示、修改、排序、保存等操作的管理。功能要求: (1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M 门课程 名称。 (2)本系统显示这样的菜单: 请选择系统功能项: a、成绩录入 b、成绩显示 c、成绩保存 d、成绩排序 e、成绩修改(要求先输入密码) f、成绩统计 1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩 3)显示超过某门课程平均成绩的学生人数 g、退出系统 (3)执行一个具体的功能之后,程序将重新显示菜单。 (4)将学生成绩保存到文件中。 四、四、 具体设计过程:具体设计过程: 4.14.1 、定义数据结构及相关解释、定义数据结构及相关解释 1) 在班级成绩管理系统中,各模块功能系统之间构成的数据结构关系为非线性数 2 班级成绩管理系统 据结构的树结构。 2) 树结构:每一个结点只有一个前件,称为父结点。没有前件的结点只有一个,称为 树的根结点,简称树的根。在班级成绩管理系统中的数据结构图中“成绩管理程序” 为根;在树结构中,每一个结点都可以有多个后件,他们都称为该结点的子结点,没有后 件的结点称为叶子。例如,在班级成绩管理系统中的数据结构图中“查看数据”、 “ 通 过比较学号来插入数据” 、 “ 通过姓名查找查看数据” 、 “ 通过姓名查找来更新数据” 、 “ 保 留数据”以及求各学科的“平均分、最高分、最低分”为“学生成绩管理系统”的子结点, 也是该树结构的叶子。 4.24.2、软件的模块划分软件的模块划分 根据对班级成绩管理系统功能分析的情况,可将班级成绩管理系统做如下模 块划分: 1)main( )主函数 - 班级成绩管理系统程序主函数; 2)print( )打印函数 - 设置班级成绩管理系统界面; 3)cin( )数据输入函数 - 数据多格式输入; 4)cindata( )其他数据继续输入函数; 5)lookdata( )查看数据函数 - 查看已保存的数据; 6)insert( )插入数据的函数 - 通过比较学号来插入数据; 7)find( )查看数据的函数 - 通过姓名查找查看数据; 8)update( )更新数据的函数 - 姓名查找来更新数据; 9)save( )保留数据函数 - 储存处理后的数据; 10) caverage();求各学生语文平均分、最高和最低分成绩的函数; 11) maverage();求各学生数学平均分、最高和最低分成绩的函数; 12) eaverage();求各学生英语平均分、最高和最低分成绩的函数; 13) comaverage();求各学生计算机平均分、最高和最低分成绩的函数 注:(2)(13)为自定义功能函数,通过 main()主函数调用实现其功能。 4.34.3、程序流程设计程序流程设计 根据 班级成绩管理系统功能分析绘制流程图: 3 班级成绩管理系统 开始passwords初始界面用户信息 输入其他数据 插入数据 功能选择 查找查看数据 查找更新数据 保留数据 显示或打印数据 求学生语文平均分 求学生数学平均分 求学生英语平均分 求学生计算机平均分 空操作 主程序流程图, 班级成 绩管理系统操作流程。返回 其他数据输入姓名学号性别成绩 语文 数学 英语 计算机 选择 返回 继续输入 其他数据输入过程 注:其他功能的流程图可参照“其他数据输入”的流程图绘制。 4 班级成绩管理系统 4.44.4、各功能模块编写内容详细情况及调试各功能模块编写内容详细情况及调试 1) 数据类型的定义。 在定义数据类型时,由于班级成绩管理信息需要由不同类型的数据反映出来。如:姓 名、性别都需要用 char 型数据,而学号和成绩则需要用 int 型数据,并且每位同学的以 上信息都需要一次性输入,所以采用结构体类型定义。 如: typedef struct student/*定义结构体*/ char nameMAX; - 定义 char 型姓名 int numMAX; - 定义 int 型学号 char sexMAX; - 定义 char 型性别 int chinese; - 定义 int 型语文成绩 int mathematic; - 定义 int 型数学成绩 int english; - 定义 int 型英语成绩 int computer; - 定义 int 型计算机成绩 struct student *next; - 结构体指针 stu; 说明:在定义结构体类型和变量时,可采用先定义结构体类型再定义结构提变量,也 可同时定义结构体类型和变量,还可以直接定义结构提变量。上例中的定义方式为同时定 义结构体的类型和变量。 结构体定义的格式如下: struct 结构体名 类型标识符成员名; ; 2)函数的命名和库函数的使用。 A. 函数命名是遵循标识符的命名规则,并且要尽量做到顾名思义的效果。如: lookdata( )为查看数据函数。 B. 库函数使用时要提前声明(#include 等)用到的函数必须包括在库函数或 者已自定义的函数中,否则编译出错。 C. 函数调用时要注意形参和实参数据类型的对应。 5 班级成绩管理系统 3) 函数结构和功能实现。 A. 数据输入函数“cin( )” B. 查看数据函数“lookdata( )” C. 插入数据的函数“insert( )” D. 查看数据的函数“find( )” E. 更新数据的函数“update( )” F. 保留数据函数“save( )” 注:以上的六个功能函数为班级成绩管理系统的输入、读取、修改等主要功能函 数,其中主要运用字符串比较,定义指针变量,输入输出等多种函数和操作实现其对外界 输入内容进行处理功能以及防止出错的备份功能。 G. 管理系统中的各个模块函数的功能实现基本都依靠与以上三中函数类似的编辑方 法编写。主要通过以下结构实现对应功能。 for 循环结构 对使用者输入内容与内部资料内容进行核对。 switch 选择结构 对使用者所选择的项目进行判断并调用对应的函数。 if-else 选择结构 配合 for 循环核对内容的正确与否选择对应的操作。 while 、do-while 循环结构 条件判断并进行对应的操作。 H. 具体功能函数源程序的编辑内容见后文的班级成绩管理系统源程序。 4.54.5、源程序内容及调试结果、源程序内容及调试结果 1) 源程序(原始密码是 175844): #includestdio.h 2) #includestddef.h 3) #includestddef.h 4) #includestring.h 5) #define MAX 10 6) typedef struct student/*定义结构体*/ 7)char nameMAX;/*姓名*/ 8)int numMAX;/* 学号*/ 9)char sexMAX;/*性别*/ 6 班级成绩管理系统 10)int chinese;/*语文*/ 11)int mathematic;/* 数学*/ 12)int english;/*英语*/ 13)int computer;/*计算机*/ 14)struct student *next;/*结构体指针*/ 15)stu; 16) stu *head;/*头指针*/ 17) void print()/*显示或打印函数*/ 18) 19)system(cls);/*运行前清屏*/ 20)printf(tt*Students Grade Management System*n);/*成绩管理系统*/ 21)printf(tttEnter Recordtn);/*输入数据*/ 22)printf(tttDisplaytn);/*显示*/ 23)printf(tttInserttn);/*插入数据*/ 24)printf(tttQuesttn);/*访问数据*/ 25)printf(tttUpdatetn);/*以前数据*/ 26)printf(tttSavetn);/*保留数据*/ 27)printf(tttFreshtn);/*更新数据*/ 28)printf(tttChinese Averagetn);/*语文平均成绩*/ 29)printf(tttMath Averagetn);/*数学平均成绩*/ 30)printf(tttEnglish Averagetn);/*英语平均成绩*/ 31)printf(tttComputer Averagetn);/*计算机平均成绩*/ 32)printf(tttBACK TO MENUtn);/*返回主菜单*/ 33)printf(tttQuittn);/*退出*/ 34) 35)printf(tt*n); 36)printf(tttGive your Choice(1-13): ); 37) 38) 39) 40) void cin(stu *p1)/*输入相关数据的函数*/ 41) printf(Enter name:n); 42)scanf(%s, 43)printf(Enter num:n); 44)scanf(%d, 45)printf(Enter sex:n); 7 班级成绩管理系统 46)scanf(%s, 47)printf(Enter score:n); 48)printf(Enter chinese:n); 49)scanf(%d, 50)printf(Enter math:n); 51)scanf(%d, 52)printf(Enter English:n); 53)scanf(%d, 54)printf(Enter Computer:n); 55)scanf(%d, 56) 57) stu *cindata()/*其他数据是否继续输入的函数*/ 58) stu *p1,*p2; 59)int i=1; 60)char ch; 61)p1=(stu *)malloc(sizeof(stu); 62)head=p1; 63)while(i) 64) 65)cin(p1); 66)printf(Do you Want to Continue?yes or no:);/*是否继续输入数据*/ 67)ch=getchar(); 68)ch=getchar(); 69)if(ch=n|ch=N) 70) i=0; 71)p1-next=NULL; 72)print(); 73) 74) 75) 76)else 77) p2=p1; 78)p1=(stu *)malloc(sizeof(stu); 79)p2-next=p1; 80) 81) 8 班级成绩管理系统 82)return(p1-next); 83) 84) stu *lookdata(stu *p1)/*查看数据的函数*/ 85) 86)while(p1!=NULL) 87) printf(Num:%dt,p1-num); 88)printf(Name:%st,p1-name); 89)printf(Sex:%st,p1-sex); 90)printf(n); 91)printf(Chinese:%dt,p1-chinese); 92)printf(Math:%dt,p1-mathematic); 93)printf(English:%dt,p1-english); 94)printf(Computer:%dt,p1-computer); 95)printf(n); 96)p1=p1-next; 97) 98)return p1; 99) 100) 101) void insert()/*通过比较学号来插入数据的函数*/ 102) stu *p1,*p3,*p2; 103)char ch; 104)p1=head; 105)p3=(stu *)malloc(sizeof(stu); 106)p3-next=NULL; 107)if(head=NULL) head=p3; return; 108)cin(p3); 109)while(p1!=NULLp1=p1-next; 111)if(p2=head) p3-next=head; head=p3; return; 112)p3-next=p1; 113)p2-next=p3; 114) 115) 116) 117) find(stu *p2)/*通过姓名查找查看数据的函数*/ 9 班级成绩管理系统 118) char name20; 119)int b=0; 120)printf(Enter the name of the student you want to find:);/*通过姓名查看*/ 121)scanf(%s,name); 122)while(p2!=NULL) 123)if(strcmp(name,p2-name)=0) 124) 125)printf(The data you want has be foundn); 126)printf( Name:%st,p2-name); 127)printf(Num:%dt,p2-num); 128)printf(sex%st,p2-sex); 129)printf(n); 130)printf(Chinese:%dt,p2-chinese); 131)printf(Math:%dt,p2-mathematic); 132)printf(English:%dt,p2-english); 133)printf(Computer:%dt,p2-computer); 134)printf(n); 135)b=1; 136) 137)else if(b=0) 138)printf(sorry not find data!); 139)p2=p2-next; 140) 141) if(b=1) 142) 143)print(); 144)printf(Find onen); 145)else 146)print(); 147)printf(Not findn); 148) 149) 150) 151) void caverage()/*求各学生语文平均分、 最高和最低分成绩的函数*/ 152) stu *p1; 153)int i; 10 班级成绩管理系统 154)float max=0.0,min=200.0; 155)float sum=0.0,aver=0; 156)p1=head; 157)if(p1=NULL) 158)printf(not data!); 159)else 160)for(i=0;p1!=NULL;i+,p1=p1-next) 161) sum+=p1-chinese; 162)aver=sum/i; 163)p1=head; 164) for(i=0;p1!=NULL;i+,p1=p1-next) 165)if(maxchinese) 166)max=p1-chinese; 167) 168)p1=head; 169) for(i=0;p1!=NULL;i+,p1=p1-next) 170)if(minp1-chinese) 171)min=p1-chinese; 172) 173)printf(Chinese Average:%f,aver); 174)printf(Chinese Max:%f,max); 175)printf(Chinese Min:%f,min); 176) 177) void maverage()/*求各学生数学平均分、最高和最低分成绩的函数*/ 178) stu *p1; 179)int i; 180)float max=0.0,min=200.0; 181)float sum=0.0,aver=0; 182)p1=head; 183)if(p1=NULL) 184)printf(not data!); 185)else 186)for(i=0;p1!=NULL;i+,p1=p1-next) 187) sum+=p1-mathematic; 188)aver=sum/i; 189)p1=head; 11 班级成绩管理系统 190) for(i=0;p1!=NULL;i+,p1=p1-next) 191)if(maxmathematic) 192)max=p1-mathematic; 193) 194)p1=head; 195) for(i=0;p1!=NULL;i+,p1=p1-next) 196)if(minp1-mathematic) 197)min=p1-mathematic; 198) 199)printf(Mathe Average:%f,aver); 200)printf(Mathe Max:%f,max); 201)printf(Mathe Min:%f,min); 202) 203) 204) void eaverage()/*求各学生英语平均分、最高和最低分成绩的函数*/ 205) stu *p1; 206)int i; 207)float max=0.0,min=200.0; 208)float sum=0.0,aver=0; 209)p1=head; 210)if(p1=NULL) 211)printf(not data!); 212)else 213)for(i=0;p1!=NULL;i+,p1=p1-next) 214) sum+=p1-english; 215)aver=sum/i; 216)p1=head; 217) for(i=0;p1!=NULL;i+,p1=p1-next) 218)if(maxenglish) 219)max=p1-english; 220) 221)p1=head; 222) for(i=0;p1!=NULL;i+,p1=p1-next) 223)if(minp1-english) 224)min=p1-english; 225) 12 班级成绩管理系统 226)printf(English Average:%f,aver); 227)printf(English Max:%f,max); 228)printf(English Min:%f,min); 229) 230) 231) void comaverage()/*求各学生计算机平均分、最高和最低分成绩的函数*/ 232) stu *p1; 233)int i; 234)float max=0.0,min=200.0; 235)float sum=0.0,aver=0; 236)p1=head; 237)if(p1=NULL) 238)printf(not data!); 239)else 240)for(i=0;p1!=NULL;i+,p1=p1-next) 241) sum+=p1-computer; 242)aver=sum/i; 243)p1=head; 244) for(i=0;p1!=NULL;i+,p1=p1-next) 245)if(maxcomputer) 246)max=p1-computer; 247) 248)p1=head; 249) for(i=0;p1!=NULL;i+,p1=p1-next) 250)if(minp1-computer) 251)min=p1-computer; 252) 253)printf(Computer Average:%f,aver); 254)printf(Computer Max:%f,max); 255)printf(Computer Min:%f,min); 256) 257) 258)update(stu *p2)/*通过姓名查找来更新数据*/ 259) 260)char name10;/*p2 为指向结构体 struct student 的指针*/ 261)int b=0; 13 班级成绩管理系统 262)printf(Enter The Name);/*输入姓名*/ 263)scanf(%s,name); 264)while(p2!=NULL) 265)if(strcmp(name,p2-name)=0) 266) 267)printf(Find you datan); 268)scanf(Name:%s,p2-name); 269)scanf(Num:%s,p2-num); 270)scanf(Sex:%s,p2-sex); 271)scanf(Chinese:%d,p2-chinese); 272)scanf(Math:%d,p2-mathematic); 273)scanf(english:%d,p2-english); 274)scanf(Computer:%d,p2-computer); 275)printf(Success!); 276)b=1; 277)else if(b=0) 278)printf(Sorry not Find data!); 279)p2=p2-next; 280)if(b=0) 281)print(); 282)printf(Sorry not Find data!); 283) 284)else 285) 286)print(); 287)printf(Finish!); 288) 289) 290) save(stu *p2)/*保留数据函数*/ 291) 292)FILE *fp; 293)char file10; 294)printf(Enter file name);/*输入文件名*/ 295)scanf(%s,file); 296)fp=fopen(file,w); 297)while(p2!=NULL) 14 班级成绩管理系统 298) 299)fprintf(fp,%s,p2-name); 300)fprintf(fp,%s,p2-num); 301)fprintf(fp,%s,p2-sex); 302)fprintf(fp,%d,p2-chinese); 303)fprintf(fp,%d,p2-mathematic); 304)fprintf(fp,%d,p2-english); 305)fprintf(fp,%d,p2-computer); 306)p2=p2-next; 307) 308)fclose(fp); 309) 310) 311) char password7=175844;/*定义初始密码*/ 312) 313) void main()/*主函数*/ 314) int choice; 315)stu *p2; 316)char s8; 317)int flag=0,i;/*标志项*/ 318)int n=3; 319)do printf(Enter password:n); 320)scanf(%s,s); 321)if(!strcmp(s,password)/*进行密码匹配验证*/ 322) printf(PASSnnn); 323)flag=1; 324)break; 325) 326)else 327)printf(Error Enter again:n); 328)n-; 329) 330) 331)while(n0); 332)if(!flag) 333)printf(you have Enter 3 times!);/*输入密码超过了 3 次! !*/ 15 班级成绩管理系统 334)exit(0);/*自动退出*/ 335) 336)/*密码验证成功后进入的界面*/ 337) 338)printf(tt*Welcom to the Mis*nn); /* 操作界面*/ 339) 340)printf(tttAuthor:xie_bi_yun tttClass:T08102n tttNum:14n);/*作者, 班级和 号码*/ 341)printf(tt*nn); 342) 343)printf(nnnn); 344) 345)/*printf(ttEnter the MIS, yes or no?:);/*问进入系统与否*/ 346)/* scanf(%d, 347)if(choice=y|choice=Y) 348)exit(1); 349)print(); 350)break; */ 351) print(); 352) while(1) 353) 354) scanf(%d, 355) if(i13) 356) 357)printf(Enter num from 1 to 13:n);/* 再从 1-13 中进行选择*/ 358)exit(1); 359) 360)switch(i) 361)case 1: 362)p2=cindata();/*其他数据是否继续输入的函数*/ 363)break; 364)case 2: 365)p2=lookdata(head);/*查看数据的函数*/ 366)break; 367)case 3: 368)insert();/*通过比较学号来插入数据的函数*/ 16 班级成绩管理系统 369)break; 370)case 4: 371)find(head);/*通过姓名查找查看数据的函数*/ 372)break; 373)case 5: 374)update(head);/*通过姓名查找来更新数据*/ 375)break; 376)case 6: 377)save(head);/*保留数据函数*/ 378)break; 379)case 7: 380)print();/*显示或打印函数*/ 381)break; 382)case 8: 383)caverage();/*求各学生语文平均分、最高和最低分成绩的函数*/ 384)break; 385)case 9: 386)maverage();/*求各学生数学平均分、最高和最低分成绩的函数*/ 387)break; 388)case 10: 389)eaverage();/*求各学生英语平均分、最高和最低分成绩的函数*/ 390)break; 391)case 11: 392)comaverage();/*求各学生计算机平均分、最高和最低分成绩的函数*/ 393)break; 394)case 12: 395)print(); 396)break;/*返回主菜单*/ 397)case 13: 398)exit(1);/*退出*/ 399)break; 400) 401)scanf(%d, 402) 403) 404) 17 班级成绩管理系统 405) 406) 407)程序运行过程: A. TC 的调试和运行: TC 程序在运行前首先要设置其路径,这样才能调用库函数,一般 TC 默认的路径为 C:TC,但如果用户拷贝的TC 没有装载在 C 盘下,则TC 将无法寻找到路径,必须重新调 试其路径。 调试方法如下(以装载在 C 盘为例) : 打开 TC 编辑页面,找到 Options 选项,将 Directories 中的所有 C:更改为 G:, 然后点 Save options.修改后 TC 就可以成功的调用库函数文件了。 B. 程序模块化检验: 根据之前需要,将程序划分为多个模块,然后将每个模块单独编写,每个模块可以 单独编写一个程序来检测。 例如:在班级成绩管理系统中的“班级成绩输入模块”可根据以下方式,先单 独定义一个 main( )函数,看其是否符合要求的功能。 #includestdio.h #includestddef.h #includestddef.h #includestring.h #define MAX 10 typedef struct student char nameMAX; int numMAX; char sexMAX; int chinese; int mathematic; int english; int computer; struct student *next; stu=kang,01,g,61,71,81,91,wang,02,b,62,72,82,92; main() struct student *p; 18 班级成绩管理系统 for(p=stu;pname,p-num,p-sex,p-chinese,p-mathematic,p-english,p- c

温馨提示

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

评论

0/150

提交评论