《C语言程序设计》项目设计报告项目名称:学生成绩信息管理系统2016年 1月 13日目录1 项目分析 (1)1.1 问题描述 (1)1.2 功能需求分析 (1)2 系统设计 (2)2.1 数据结构设计 (2)2.3部分功能设计 (2)3 系统实现源程序 (4)3.1 主函数设计 (4)3.2 添加学生信息 (5)3.3 姓名学号查询 (10)3.4 成绩查询 (12)3.5 删除学生成绩信息 (13)3.6 修改学生成绩信息 (14)4 功能测试 (16)4.1 菜单测试 (16)4.2 系统功能测试 (17)5 系统设计遇到的问题及解决方法 (21)6 项目设计总结 (22)1 项目分析1.1 问题描述信息储存与查询是计算机处理数据的优势之一,目前,学生信息的管理系统已经完全走进了校园,其中成绩信息的储存是主要部分,本课题使用C语言实现学生成绩的储存,查询,修改,以及删除等操作。
程序中涉及到数据块和文件指针的操作,包括结构体数据定义,使用及文件的读写,定位,修改等。
1.2 功能需求分析学生成绩信息管理系统的主要功能如下:①添加学生信息:录入学生的基本信息,如姓名,学号,成绩。
②显示所有学生成绩信息:直接显示已经全部录入学生的成绩信息。
③学号或姓名查询:可以根据学生的姓名和学号直接查询该名学生的成绩。
④成绩查询:可以根据一个特定的分数来查询学生的信息。
⑤删除学生成绩信息:可以直接根据学号确定是否删除对应学生的成绩信息。
⑥修改学生成绩信息:直接根据学生学号来修改学生的姓名,学号,成绩。
图1-1 系统功能模块图2 系统设计2.1 数据结构设计2.2 函数设计表1 函数列表2.3部分功能设计1.删除学生的信息,输入学生的学号进行删除操作,如果没有此人,系统将会提示无此人,如果找到,系统将会确认你是否需要删除,流程图如1-2所示。
图1-2 删除学生信息流程图2.输入学号进行查询对应同学的成绩,流程图如图1-3所示。
图1-3 查询功能流程图3 系统实现源程序3.1 主函数设计void main(){int x;system("cls"); /*清屏*/do{printf("\n 欢迎使用学生成绩信息管理系统\n\n\n\n\n");printf(" 1 ---------添加学生信息\n\n");printf(" 2 ---------显示所有学生成绩信息\n\n");printf(" 3 ---------学号或姓名查询\n\n");printf(" 4 ---------成绩查询\n\n");printf(" 5 ---------删除学生成绩信息\n\n");printf(" 6 ---------修改学生成绩信息\n\n");printf(" 0 ---------退出");printf(" 请您选择:");choice:scanf("%d",&x);switch(x){case 1:add();break;case 2:printall();break;case 3:search();break;case 4:jgsearch();break;case 5:del();break;case 6:modify();break;case 0:break;default:printf("\n 错误的选择,请重新选择:");goto choice;}}while(x!=0);system("cls");printf("\n\n 欢迎再次使用学生成绩管理系统\n");}3.2 添加学生信息/*学生成绩信息管理系统*/#include <stdio.h>#include <stdlib.h>#include <string.h>int c,j,t;struct stu /*定义结构体类型*/{char name[10];char num[10];char score[10];}student[100],newstudent[100];/*添加学生个人信息*/void addnew(){int a,b,k;FILE *fp,*fp1,*fp2; /*FILE类型指针变量的定义形式*/for(a=0;a<200;a++){system("cls");printf(" 欢迎使用学生成绩管理系统\n\n\n");printf(" 录入学生信息\n\n");printf("输入学生姓名:");scanf("%s",&student[a].name);printf("输入学生学号:");scanf("%s",&student[a].num);printf("输入学生成绩:");scanf("%s",&student[a].score);printf("输入‘1’继续,‘0’结束\n"); /*判断输入是否结束*/ scanf("%d",&b);if(b==0){c=a;system("cls");break;}}if((fp1=fopen("Ca1.txt","w"))==NULL) /*文件名,使用文件方式*/{printf("信息写入失败");exit(0);}if((fp2=fopen("Ca2.txt","w"))==NULL){printf("信息写入失败");exit(0);}if((fp=fopen("Ca3.txt","w"))==NULL){printf("信息写入失败");exit(0);}j=sizeof(struct stu);for(a=0;a<=c;a++){if(fwrite(&student[a],j,1,fp)!=1)printf("存入失败!");}for(a=0;a<=c;a++){if(strcmp(student[a].score,"80")==0){fwrite(&student[a],j,1,fp1);}{fwrite(&student[a],j,1,fp2);}}printf("添加成功!\n\n");printf("请输入'0'返回\n");scanf("%d",&k);fclose(fp1);fclose(fp2);fclose(fp);if(k==0)system("cls");}/*继续添加成员*/void addold(){int a,b,k,p,q;char wjm[20];FILE *fp;j=sizeof(struct stu);system("cls");printf(" 欢迎使用学生成绩信息管理系统\n\n\n");printf(" 录入学生信息\n\n");printf("\n\n 存储文件名有Ca1.txt Ca2.txt Ca3.txt \n\n");printf("请输入想继续添加的文件名:");scanf("%s",wjm);for(a=0;a<200;a++){printf("输入学生姓名:");scanf("%s",&newstudent[a].name);printf("输入学生学号:");scanf("%s",&newstudent[a].num);printf("输入学生成绩:");scanf("%s",&newstudent[a].score);printf("输入‘1’继续,‘0’结束\n"); //判断输入是否结束scanf("%d",&b);if(b==0){c=a;system("cls");break;}if((fp=fopen(wjm,"r"))==NULL){printf("文件打开失败!");exit(0);}a=0;while(!feof(fp)){fread(&student[a],j,1,fp);a++;}fclose(fp);t=a-1;for(q=0,p=t;q<=c,p<=t+c;q++,p++){strcpy(student[p].name,newstudent[q].name);strcpy(student[p].num,newstudent[q].num);strcpy(student[p].score,newstudent[q].score);}if((fp=fopen(wjm,"w"))==NULL){printf("文件打开失败!");exit(0);}for(a=0;a<=t+c;a++){if(fwrite(&student[a],j,1,fp)!=1)printf("存入失败!");}printf("添加成功!\n\n");printf("请输入'0'返回\n");scanf("%d",&k);fclose(fp);if(k==0)system("cls");}void add(){int x;system("cls");printf(" 欢迎使用学生成绩信息管理系统\n\n\n");printf(" 添加学生信息\n\n");printf(" 1 重新添加信息\n");printf(" 2 继续添加信息\n");printf(" 0 返回\n\n\n");printf(" 请选择:");scanf("%d",&x);choice:switch(x){case 1:addnew();break;case 2:addold();break;case 0:break;default:printf("\n 错误的选择,请重新选择:"); goto choice;}system("cls");}/*显示所有学生的成绩*/void printall(){int a,b;FILE *fp,*fp1,*fp2;system("cls");printf(" 欢迎使用学生成绩信息管理系统\n\n\n");printf(" 全部已录入学生信息\n\n");printf("%-10s%-20s%-50s\n","姓名","学号","成绩");j=sizeof(struct stu);if((fp=fopen("Ca1.txt","r"))==NULL){printf("\n打开失败");exit(0);}if((fp1=fopen("Ca2.txt","r"))==NULL){printf("信息写入失败");exit(0);}if((fp2=fopen("Ca3.txt","r"))==NULL){printf("信息写入失败");exit(0);}a=0;while(!feof(fp)){if(fread(&student[a],j,1,fp)==1){printf("%-10s%-20s%-50s\n",student[a].name,student[a].num,student[a].score);a++;}}a=0;while(!feof(fp1)){if(fread(&student[a],j,1,fp1)==1){printf("%-10s%-20s%-50s\n",student[a].name,student[a].num,student[a].score);a++;}}a=0;while(!feof(fp2)){if(fread(&student[a],j,1,fp2)==1){printf("%-10s%-20s%-50s\n",student[a].name,student[a].num,student[a].score);a++;}}fclose(fp);fclose(fp1);fclose(fp2);printf("返回上级请输入‘0’!\n:");scanf("%d",&b);if(b==0){system("cls");}}3.3 姓名学号查询void search(){int k,b,a;char cx[20];FILE *fp;system("cls");j=sizeof(struct stu);do{printf(" 欢迎使用学生成绩信息管理系统\n\n\n");printf(" 查找已录入学生成绩信息\n\n");k=0;if((fp=fopen("Ca1.txt","r"))==NULL){printf("\n打开失败!");exit(0);}printf("请输入学号或姓名:\n");scanf("%s",cx);if((cx[0]<'0')||(cx[0]>'9')){ a=0;while(!feof(fp)){fread(&student[a],j,1,fp);if(strcmp(student[a].name,cx)==0){printf("\n\n已查到,该记录为:\n\n");printf("%-10s%-20s%-50s\n","姓名","学号","成绩");printf("%-10s%-20s%-50s\n",student[a].name,student[a].num,student[a].score);k=1;}a++;}}if('0'<=cx[0]<='9'){ a=0;while(!feof(fp)){fread(&student[a],j,1,fp);if(strcmp(student[a].num,cx)==0){printf("\n\n已查到,该记录为:\n\n");printf("%-10s%-20s%-50s\n","姓名","学号","成绩");printf("%-10s%-20s%-50s\n",student[a].name,student[a].num,student[a].score);k=1;}a++;}}if(!k)printf("\n文件中无此人的记录。