收藏 分销(赏)

成绩管理程序设计报告(含代码C语言).doc

上传人:仙人****88 文档编号:11398097 上传时间:2025-07-21 格式:DOC 页数:19 大小:70KB 下载积分:10 金币
下载 相关 举报
成绩管理程序设计报告(含代码C语言).doc_第1页
第1页 / 共19页
成绩管理程序设计报告(含代码C语言).doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
大连民族学院 计算机科学与工程学院实验报告 实验题目: 学生成绩管理程序 课程名称: 程序设计基础实习 实验类型:□演示性□验证性□操作性■设计性□综合性 专业:网络工程 班级: 网络124 学生姓名: 学号: 实验日期: 2015年3月30日 实验地点:计算机学院综合试验中心(F-307) 实验学时: 48 实验成绩: 指导教师签字: 2015 年 3月 30日 一、教学目的与要求: 本实习的目的就是要达到能够灵活运用程序设计基础所讲授内容,能够针对一个 需求比较明确的小型问题,设计合理的解决方案,并能够用编程语言转化为程序以解 决实际问题。进一步掌握开发一个小型实用软件系统的基本步骤和方法、初步培养良 好的编程习惯、掌握调试代码的基本方法。 具体目标要求: 1)学生应该熟练掌握条件分支、循环控制等语句,掌握函数的定义与调用,能以结构体的形式(struct)表示事物对象,并以数组的形式组织数据,部分同学可以尝试用指针、文件等知识;2)学生能够以比较规范的方式书写代码,能够了解一些程序在工程上的要求以及为何这样要求; 3)学生能独立调试、跟踪代码,并能解决常见的编译错误和运行错误。 二 功能分析 1、读/写功能:在程序开始时读取数据文件中的数据至程序,在程序选择正常退出时将程序中的数据写回数据文件; 2、浏览功能:实现所有数据的显示即可; 3、查找功能:分为按照学号查找(结果唯一)和按照姓名查找(结果不唯一)两个 子功能; 4、增加功能:首先输入要增加的记录的学号,然后判断此学号是否已经存在,如果存在,则不增加,否则增加记录(放在所有记录之后即可); 5、删除功能:首先输入要删除的记录的学号,然后判断此学号是否已经存在,如果存在才删除此条记录(即数组数据的删除); 6、修改功能:首先输入要修改的记录的学号,然后判断此学号是否已经存在,如果存在,则对记录的信息项进行修改; 三.数据需求 (1)学生信息包括:学号、学生姓名、班级。 (2)课程信息包括:成绩数学、外语、物理、程序、思修、中传,共6门 四.代码说明 //头文件包含 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define SrcFile "score_141-4.txt"//常量定义 //成绩分别为:数学、外语、物理、程序、思修、中传,共6门 typedef struct{ char no[11]; //学号 char name[30]; //姓名 char clname[10]; //班级名称 int score[6]; //6门课程的分数 int sum; //本学期总分 }StScore; //函数原型声明 void mainMenu(); //主菜单 int readFunc(StScore stS[]); //从文件中读数据至数组 int saveFunc(StScore stS[], int n); //将程序中的数据写回到数据文件中 void displayAll(StScore stS[], int n); //显示功能(显示所有记录) void searchFunc(StScore stS[], int n); //查找功能 int searchByNo(StScore stS[], int n); //按学号查找 //void displaySingleRecord(StScore stS[], int index); //显示单条记录 int searchByName(StScore stS[], int n);//按姓名查找 int delFunc(StScore stS[], int n); //删除功能 int addFunc(StScore stS[], int n); //添加功能 int modifyFunc(StScore stS[], int n); //修改功能 /////////////////////////////////////////////////////////////////////// //函数说明:程序的主函数 int main() { StScore stS[300]; //用于存储数据的数组 int size; //数组中记录的数目 char x; size = readFunc(stS); if(size == -1) { printf("读取文件错误!\n"); return 1; } char sel; //菜单选项 // char no[11]; //输入的学号变量 // char name[20]; // int ret; //返回值 while(1) { mainMenu(); printf("请输入您的选项: \n"); fflush(stdin); sel = getche(); putchar('\n'); switch(sel) { case '1': //添加记录 addFunc(stS, size); size++; break; case '2': //删除记录 delFunc(stS, size); size--; break; case '3': //修改记录 modifyFunc(stS, size); break; case '4': //查找记录 { printf("请选择:1--按学号查找,2--按姓名查找\n"); x = getche(); putchar('\n'); switch(x){ case '1': searchByNo(stS, size); break; case '2': searchByName(stS, size); break; } } break; case '5': //显示记录 displayAll(stS, size); break; case '0': //退出程序 saveFunc(stS, size); return 0; default: printf("输入错误!\n"); break; } } return 0; } /////////////////////////////////////////////////////////////////////// /* 函数说明:从文件中读数据至数组 参数: stS:StScore *类型,指向要操作的学生记录数组的指针。 返回值: 如果读取成功,则返回stS数组中的记录数目;如果读取失败,则返回-1。 算法描述: 0、SrcFile文件中数据格式如下:2013250612 李宣廷 网络141 69 82 78 81 61 87; 1、从SrcFile中读取至StScore类型的数组stS; 2、如果文件操作失败,则返回-1,否则每读取一条,计数器+1,读取结束后,返回该计数器的值。 */ int readFunc(StScore stS[]) { int i, j; FILE *fp; fp = fopen(SrcFile, "r"); //只读形式打开文件 if(fp == NULL) return -1; for(i=0; !feof(fp); i++) { if(fscanf(fp, "%s%s%s", stS[i].no, stS[i].name, stS[i].clname) == EOF) break; stS[i].sum = 0; for(j=0; j<6; j++) { fscanf(fp, "%d", &stS[i].score[j]); stS[i].sum += stS[i].score[j]; } } fclose(fp); return i; } //////////////////////////////////////////////////////////* 函数说明:把程序中的数据写回数据文件 参数: stS:StScore *类型,指向要操作的学生记录数组的指针。 n:int类型,表明参数stS数组的大小 返回值: 如果写成功,则返回1,否则返回0。 算法描述:将数组stS中的数据全部写回 */ int saveFunc(StScore stS[], int n) { int i, j; FILE *fp; fp = fopen(SrcFile, "w"); //只写形式打开文件 if(fp == NULL) return -1; for(i=0; i<n; i++) { fprintf(fp, "%s %s %s ", stS[i].no, stS[i].name, stS[i].clname); for(j=0; j<6; j++) fprintf(fp, "%d ", stS[i].score[j]); } fclose(fp); return i; } /////////////////////////////////////////////////////////////////////// //函数说明:主菜单程序 void mainMenu() { printf("--1. 添加记录 --\n"); printf("--2. 删除记录 --\n"); printf("--3. 修改记录 --\n"); printf("--4. 查找记录 --\n"); printf("--5. 显示记录 --\n"); printf("--0. 退出程序 --\n"); } /* 函数说明:完成显示功能(显示所有记录) 参数说明: stS:StScore *类型,指向要操作的学生记录数组的指针 n:int类型,表明参数stS数组的大小 返回值说明:无返回值 算法描述:先显示表头,之后显示学号、姓名、班级, 接着通过循环显示成绩数组、显示总分,最后每输出一条记录换一行。 */ void displayAll(StScore stS[], int n) { int i, j; printf("学号\t\t姓名\t班级\t数学 外语 物理 程序 思修 中传 总分\t\n"); printf("------------------------------------------------------------------\n"); for(i=0; i<n; i++) { printf("%s\t%s\t%s\t", stS[i].no, stS[i].name, stS[i].clname); for(j=0; j<6; j++) printf("%d ", stS[i].score[j]); printf("%d\n", stS[i].sum); } } int addFunc(StScore stS[], int n) //添加记录功能 { int i; char sno[10]; FILE *fp; printf("请输入要添加的学号:\n"); gets(sno); for(i=0;i<n;i++) { if(strcmp(sno,stS[i].no)==0) //判断学号是否存在,字符串比较不能直接用等号,要用strcmp()函数。 { printf("此学号已存在!!!\n"); break; } } strcpy(stS[n].no,sno); //拷贝字符串。 printf("此学号已添加!!!\n"); printf("请输入姓名:\n"); gets(stS[n].name); printf("请输入班级:\n"); gets(stS[n].clname); printf("请输入数学、外语、物理、程序、思修、中传:\n"); scanf("%d %d %d %d %d %d",&stS[n].score[0],&stS[n].score[1],&stS[n].score[2],&stS[n].score[3],&stS[n].score[4],&stS[n].score[5]); // stS[n].sum=stS[n].score[0]+stS[n].score[1]+stS[n].score[2]+stS[n].score[3]+stS[n].score[4]+stS[n].score[5]; fp = fopen(SrcFile, "at"); //在文件原有内容后追加内容。 if(fp==NULL) { printf("文件不存在!!!"); return -1; } fprintf(fp," %s %s %s %d %d %d %d %d %d",stS[n].no,stS[n].name,stS[n].clname,stS[n].score[0],stS[n].score[1],stS[n].score[2],stS[n].score[3],stS[n].score[4],stS[n].score[5]); fclose(fp); printf("记录添加成功!!!\n"); return 0; } int searchByNo(StScore stS[], int n)//按学号查找信息记录 { int x=0; char sno[10]; printf("请输入学号:\n"); gets(sno); for(int i=0;i<n;i++) if(strcmp(sno,stS[i].no)==0) //判断学号是否存在 { printf("%s %s %s %d %d %d %d %d %d\n",stS[i].no,stS[i].name,stS[i].clname,stS[i].score[0],stS[i].score[1],stS[i].score[2],stS[i].score[3],stS[i].score[4],stS[i].score[5]); x++; return 0; } if(x==0) printf("此学号不存在"); return 0; } int searchByName(StScore stS[], int n)//按姓名查找信息记录 { char sname[20]; int a=0; printf("请输入姓名:\n"); gets(sname); for(int i=0;i<n;i++) if(strcmp(sname,stS[i].name)==0) //判断学号是否存在 { printf("%s %s %s %d %d %d %d %d %d\n",stS[i].no,stS[i].name,stS[i].clname,stS[i].score[0],stS[i].score[1],stS[i].score[2],stS[i].score[3],stS[i].score[4],stS[i].score[5]); a++; } if(a==0) printf("此姓名不存在!!!\n"); return 0; } int delFunc(StScore stS[], int n)//按学号删除信息 { int weizhi=-1,i,j; FILE *fp; char sno[10]; printf("请输入要删除的学号:\n"); gets(sno); for(i=0;i<n;i++) if(strcmp(sno,stS[i].no)==0) //判断学号是否存在 { // printf("%s %s %s %d %d %d %d %d %d\n",stS[i].no,stS[i].name,stS[i].clname,stS[i].score[0],stS[i].score[1],stS[i].score[2],stS[i].score[3],stS[i].score[4],stS[i].score[5]); weizhi=i; break; } if(weizhi==-1) printf("此学号不存在!!!\n"); else printf("删除成功!!!\n"); for(i=weizhi;i<n-1;i++) { strcpy(stS[i].no,stS[i+1].no); strcpy(stS[i].name,stS[i+1].name); strcpy(stS[i].clname,stS[i+1].clname); stS[i].score[0]=stS[i+1].score[0]; stS[i].score[1]=stS[i+1].score[1]; stS[i].score[2]=stS[i+1].score[2]; stS[i].score[3]=stS[i+1].score[3]; stS[i].score[4]=stS[i+1].score[4]; stS[i].score[5]=stS[i+1].score[5]; } fp = fopen(SrcFile, "w"); //只写形式打开文件 if(fp == NULL) return -1; for(i=0; i<n-1; i++) { fprintf(fp, "%s %s %s ", stS[i].no, stS[i].name, stS[i].clname); for(j=0; j<6; j++) fprintf(fp, "%d ", stS[i].score[j]); } fclose(fp); return 0; } int modifyFunc(StScore stS[], int n)//修改成绩 { int x=0,j; FILE *fp; char sno[10]; printf("请输入要修改的学号:\n"); gets(sno); for(int i=0;i<n;i++) if(strcmp(sno,stS[i].no)==0) //判断学号是否存在 { printf("请输入要修改的成绩按照数学、外语、物理、程序、思修、中传:\n"); scanf("%d %d %d %d %d %d",&stS[i].score[0],&stS[i].score[1],&stS[i].score[2],&stS[i].score[3],&stS[i].score[4],&stS[i].score[5]); printf("修改成功!!!\n"); x++; return 0; } if(x==0) printf("此学号不存在\n"); fp = fopen(SrcFile, "w"); //只写形式打开文件 if(fp == NULL) return -1; for(i=0; i<n; i++) { fprintf(fp, "%s %s %s ", stS[i].no, stS[i].name, stS[i].clname); for(j=0; j<6; j++) fprintf(fp, "%d ", stS[i].score[j]); } fclose(fp); return 0; } 五.心得体会 课程设计实践训练,在课设中也遇到了很多问题,经过向老师询问和跟同学们交流,认真的思考,积极解决问题,终于解决了那些问题。在解决问题的过程中,我也学到了很多知识,更是让我把课本的知识应用到实际之中,让我了解了我们学习的知识有什么用,增强我的自信心和学习的动力。同时感谢老师和同学在课程设计过程中的帮助! 总之,通过这次课程设计,我获益匪浅。
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

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

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

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服