一、设计目的
二、设计要求
三、总体设计
四、详细设计
五、调试与测试
六、结果
七、心得与体会
八 、程序清单
一、设计目的
(1)基本掌握面向过程程序设计的基本思路和方法。 (2)达到熟练掌握C语言的基本知识和技能。
(3)能够利用所学的基本知识和技能,解决简单的程序。
二、设计要求
1. 信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等).
2.信息查询:输入学号,查询学生各门课程的成绩,并显示。 3.排序:按各门课程的成绩平均分进行排序,并显示。 4.信息删除与修改——输入学号,删除该学生的成绩信息。 5、利用结构体数组实现学生信息的数据结构设计。 6、系统的各个功能模块要求用函数的形式实现。 7、系统界面要友好。 三、总体设计
1 根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改
模块,删除模块,查找模块,显示模块.
学生成绩管理系统 学生信息输入 学生信息显示 学生信息修改 删除学生信息 学生信息查找
2.信息录入流程图
四、详细设计 1.主函数
首先加入登陆界面,为了用户信息安全设有密码保护。再
次进入系统主界面。主界面设计简单,方便用户操作。
流程图如下:
显示一系列功能模块1-9
N 输入choice,判断choice是否是1-9 Y 根据choice 的值调用各功能模块函数
2、录入学生信息模块
其中包括学生的姓名、学号和性别以及学生的语文、数学、英
语等相关信息;可用函数int insert(stud stu[],int n) 来实现此
操作。当正确输入存在的学生学号,系统进行判断时,如果输入学号错误,提示不存在此学生。输入完一个学生信息后,系统会提示是否在输入。输入完学生信息后,系统提示保存。输入y后保存输入信息。 学生信息放在定义的结构体中 typedef struct {
long int num; char name[10]; char sex[3]; float Chinese;
float Math; float English; float total; float average; }stud; stud stu[N]; 3、修改模块
用void modify(stud stu[],int n)函数来实现。用户输入学号,系统自动查找要删除学生的信息。用户需确认删除。
流程图
继续? 找到? 输入要修改学生号或名字 y 显示记录,调用修改函数 n 提示没有找到 y n 返回主菜单 4、排序模块:可用void sort(stud stu[],int n)来实现,一共有5种排序方法。分别是,1按语文成绩排序,2按数学成绩排序3按平均分排序4按英语成绩排序5按总分排序。
选择(1-5) 选择排序方式(5种)
y
继续? n 返回主菜单
显示打印信息
5、查询模块
可用void search(stud stu[],int n)函数,查找学生信息。分别
有按学号查找和按姓名查找两种,找到就输出此学生全部信息包括学生的语文、数学、英语和等的成绩。 流程图:
是否找到
学生记录
Y n
y 显示找到的记录 提示没有找到 输入学生学号或者姓名 询问是否继续 n 返回主菜单 6、删除模块
删除模块用函数 int delet (stud stu[],int n)来实现。删除时课按学号删除和按名字删除两种,有用户选择。
流程图:
输入要删除的学号或者姓名
继续? n 返回主菜单 y 显示记录,调用删除函数 y 找到? n 提示没有找到 7.退出系统
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。 8文件的打开和保存
系统统调用int openfile( stud stu[],int n)函数实现对文件的打开。调用void savefile(stud stu[],int n) /函数,保存写入信息和保存需要文件。
五.调试与测试
问题一、学生信息录入: 当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。 解决办法及步骤:
1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。
2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错
3、输出用于循环检查语句中的学生信息,发现乱码 4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。 问题二、查询模块:
当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语等成绩。 解决办法及步骤:
1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语等成绩。
2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。
六、结果 1登陆界面 默认密码是 8;
2主菜单界面
3修改信息界面
4查询界面
5排序界面
七、心得体会
本次c语言课程设计我选择的题目是学生成绩管理系统,之前我没有接触过c语言设计,只是在单片机上运用过c语言。在单片机运用的c语言与c课程设计的语法有一定区别,所以在开始写这个程序的时候很不习惯,经常编译出错。为此我查了许多c语言课本。慢慢地改错。
这次课程设计最大的收获是,巩固了我的c语言基础。在学完c预言这门课后我以为我完全掌握了c语言,为此也去考了全国计算机2级。但这次我再次感受到理论与实际操作的区别,发现实际操作更能巩固我们的知识,拓宽我们的知识。为此以后我在学习各方面知识的时候要更加注重理论与实际操作的结合。
八、程序代码
#include long int num; char name[10]; char sex[3]; float Chinese; float Math; float English; float total; float average; }stud; stud stu[N]; stud s; void init(stud stu[],int n); int openfile( stud stu[],int n) { int i=0,num; FILE *fp; //定义文件指针 char filename[20]; //保存文件名 printf(\"输入文件名:\"); scanf(\"%s\输入要打开的文件名 if((fp=fopen(filename,\"rb\"))==NULL) //打开文件 { printf(\"\\sorry!无法打开这个文件!\\n\"); //打开文件失败 printf(\"\\\\"); system(\"pause\"); return(n); } fscanf(fp,\"%d\读入数据量 while(i n+=num; fclose(fp); { printf(\"\ 学号\姓名\性别\语文\数学\英语\总分\平均分\\n\"); for(i=0;i printf(\"%3.1f\%3.f\%3.1f\%5.1f\%3.1f\\n\u[i].average); } printf(\"\\\读入数据成功!!\\n\"); } printf(\"\\\\"); system(\"pause\"); return(n); void search(stud stu[],int n)//查找函数,查找学生信息,2中查找方法 { system(\"cls\"); //清屏 int i,t,d; char z,K='y'; char name[20]; printf(\"\\r\\n\\\----------更改学生信息----------\\n\"); printf(\"\\n\\n\\n\\n\"); printf(\"\\r\\\\1.按学号查找\\n\\\\2.按姓名查找\\n\"); printf(\"\\n \"); scanf(\"%d\ switch(d) { case 1: printf(\"\\r\\\\ 请输入学号:\"); scanf(\"%ld\ for(i=0;i K='x'; printf(\"\学号\名字\性别\语文\数学\英语\总分\平均分\\n\"); //打 stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3; 印信息 stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese; printf(\"\%4ld\\ printf(\" %s\\ printf(\"%s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); //return(stu[i].num); //getchar(); printf(\"\\r\\n\\n\\\\ 是否继续查找??y/n? \"); //是否继续 scanf(\"%s\ if((z=='y')||(z=='Y')) search(stu,n); break; } } if(K=='y') //没有学生信息 { //printf(\"\\r\\\\找不到该学生!!\"); printf(\"\\r\\n\\\\sorry!找不到该学生!!\"); } break; case 2: printf(\"\\r\\\\请输入姓名:\"); scanf(\"%s\ for(i=0;i K='x'; printf(\"\学号\名字\性别\语文\数学\英语\总分\平均分\\n\"); //打印信息 stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3; stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese; printf(\"\%4ld\\ printf(\" %s\\ printf(\"%s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); printf(\"\\r\\n\\n\\\\ 是否继续查找??y/n? \"); scanf(\"%s\ if(z=='y'||z=='Y') search(stu,n); break; } } if(K=='y') { printf(\"\\r\\n\\\\sorry!找不到该学生!!\"); printf(\"\\n\\n\\n\\n\\n\\\\"); system(\"pause\"); } break; } } void sort(stud stu[],int n)//排序函数,5种排序 { printf(\"\\n\\n\\n\\n\\n\\\\"); system(\"pause\"); system(\"cls\"); int i=0,j=0,t=0; stud s; printf(\"\\r\\n\\\------------学生信息排序----------\\n\\n\\n\\n\\n\\n\"); printf(\"\\r\\\\1.按英语成绩排序\\n\\r\\\\2.按语文成绩排序\\n\\r\\\\3.按数学成绩排序\\n\\r\\\\4.按平均成绩排序\\n\\r\\\\5.按总分成绩排序\\n\"); printf(\" 请选择:\"); scanf(\"%d\ switch(t) { case 1: for(i=0;i } } printf(\"\\r\\\\\n---------按英语成绩排序----------\\n\\n\"); init(stu,n); break; case 2: for(i=0;i stu[j]=stu[j+1]; stu[j+1]=s; } } printf(\"\\r\\\\\n---------按语文成绩排序----------\\n\\n\"); init(stu,n); break; case 3: for(i=0;i } } printf(\"\\r\\\\\n---------按数学成绩排序----------\\n\\n\"); init( stu , n); // printf(\"\\\\"); //system(\"pause\"); //getchar(); break; case 4: for(i=0;i if(stu[j].average } } printf(\"\\r\\\\\n---------按平均分成绩排序----------\\n\\n\"); init(stu,n); break; case 5: for(i=0;i if(stu[j].total } } printf(\"\\r\\\\\n---------按总分成绩排序----------\\n\\n\"); init(stu,n); // printf(\"\\\\"); //system(\"pause\"); //getch(); break; } } int delet (stud stu[],int n) //删除学生信息函数2种删除 { system(\"cls\"); long t,i,z,j,h=0; char l; char name[20]; printf(\"\\r\\\----------删除学生信息----------\\n\\n\\n\\n\\n\\n\"); // printf(\"\\r\\\\删除学生信息:\"); printf(\"\\r\\\\1.按学号删除\\n\\r\\\\2.按姓名删除\\n\"); printf(\"\\r\\\\\"); scanf(\"%d\ switch(z) { case 1: printf(\"\\r\\\\请输入学号:\"); //按学号删除 scanf(\"%ld\ for(i=0;i printf(\" \ 学号\ 姓名\ 性别\ 语文\数学\英语\总分\平均分\\n\");//打印信息 printf(\"\%4ld\\ printf(\" %s\\ printf(\"%s\\ printf(\"%3.1f\%3.1f\%3.1f\%3.1f%\%3.1f\\n\al,stu[i].average); h=1; printf(\"\\r\\\\确定删除以上信息??y/n? \"); scanf(\"%s\ if(z=='y'||z=='Y') { for(j=i;j stu[j].num=stu[j+1].num; strcpy( stu[j].name,stu[j+1].name); stu[j].Chinese=stu[j+1].Chinese; strcpy(stu[j].sex,stu[j+1].sex); stu[j].Math=stu[j+1].Math; stu[j].English=stu[j+1].English; stu[j].total=stu[j+1].total; stu[j].average=stu[j+1].average; printf(\"\\r\\\\删除成功!\\n\\n\"); printf(\"\\r\\\是否继续? y/n??? \"); scanf(\"%s\ if(z=='y'||z=='Y') delet(stu,n); } // printf(\"\\\\"); // system(\"pause\"); } } if(h==0) { printf(\"\\r\\\\sorry找不到该学生!!\\n\\n:\"); printf(\"\\r\\\\是否继续?y/n???\"); scanf(\"%s\ if(l=='y'||l=='Y') { delet (stu,n); } } break; case 2: printf(\"\\r\\\\请输入姓名:\"); //按名字删除 scanf(\"%s\ for(i=0;i { printf(\"\学号\姓名\性别\语文\数学\英语\总分\平均分\\n\"); printf(\"\%4ld\\ printf(\" %s\\ printf(\"%s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); h=1; printf(\"\\r\\\\确定删除以上信息??y/n? \"); scanf(\"%s\ if(z=='y'||z=='Y') { for(j=i;j printf(\"\\r\\\是否继续? y/n??? \"); scanf(\"%s\ if(z=='y'||z=='Y') delet(stu,n); { stu[j].num=stu[j+1].num; strcpy( stu[j].name,stu[j+1].name); stu[j].Chinese=stu[j+1].Chinese; strcpy(stu[j].sex,stu[j+1].sex); stu[j].Math=stu[j+1].Math; stu[j].English=stu[j+1].English; stu[j].total=stu[j+1].total; stu[j].average=stu[j+1].average; } // printf(\"\\\\"); // system(\"pause\"); } } if(h==0) { printf(\"\\r\\\\sorry找不到该学生!!\\n\\n:\"); printf(\"\\r\\\\是否继续?y/n???\"); scanf(\"%s\ if(l=='y'||l=='Y') { delet (stu,n); } } } return (n-1); } int insert(stud stu[],int n) //录入学生信息函数 带返回值 { system(\"cls\"); int i=0;char z='y',f; FILE *fp; //定义文件指针 char filename[20]; //定义文件名 printf(\"\\r\\\----------录入学生信息----------\\n\\n\\n\\n\\n\\n\"); for(i=n;i<=N&&z=='y';i++) //输入信息 { printf(\"\\r\\\\请输入学号:\"); scanf(\"%4d\ printf(\"\\r\\\\请输入姓名:\"); scanf(\"%s\ printf(\"\\r\\\\请输入性别:\"); scanf(\"%s\ printf(\"\\r\\\\请输入语文成绩:\"); scanf(\"%f\ printf(\"\\r\\\\请输入数学成绩:\"); scanf(\"%f\ printf(\"\\r\\\\请输入英语成绩:\"); scanf(\"%f\ stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3; stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese; n++; printf(\"\\r\\\\是否继续?y/n???\"); scanf(\"%s\ if(z=='n'||z=='N') { //n=i+1; //sort(stu,n); printf(\"\\r\\\\打印信息:\\n\"); printf(\"\ 学号\ 姓名\性别\ 语文\数学\英语\总分\ 平均分\\n\"); //打印录入信息 for(i=0;i printf(\"\%4ld\\ printf(\" %s\\ printf(\"%s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); //scanf(\"%s\ //if(filenane==y) if((fp=fopen(filename,\"w\"))==NULL) { } i=0; printf(\"是否保存?y/n? \"); //保存录入信息部分 scanf(\"%s\ if(f=='y'||f=='Y') { printf(\"输入文件名:\"); //输入文件名 scanf(\"%s\ //strcpy(filename,\"c.txt\");//数据默认保存在c.txt文件中 printf(\"\\\sorry!无法打开这个文件!\\n\"); system(\"pause\"); return 0; } fprintf(fp,\"%d\\n\写入数据 while(i i++; } fclose(fp); //关闭文件 printf(\"\\数据保存成功!\\n\");//数据默认保存在c.txt文件中 printf(\"\\\\"); z=0; system(\"pause\"); } } if(z=='y'||z=='Y') { insert(stu, n);} } return n; } void modify(stud stu[],int n)//更改学生信息函数 { system(\"cls\"); //printf(\"\\r\\\----更改学生信息---\"); int t,i,a=0; char z; printf(\"\\r\\\----------更改学生信息----------\\n\\n\\n\\n\\n\\n\"); printf(\"\\r\\\\请输入学号:\"); scanf(\"%ld\ for(i=0;i // printf() printf(\"\ 学号\姓名\性别\语文\数学\英语\总分\平均分\\n\"); //打印信息 printf(\"\ %4ld\\ printf(\" %s\\ printf(\" %s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); a=1; //return(stu[i].num); // getchar(); //break; //printf(\"sorry!找不到该学生\"); //a==0; printf(\"\\r\\\你确定要更改以上信息?y/n?? \");//确认更改 scanf(\"%s\ if(z=='y') { printf(\"\\r\\\\请输入学号:\"); // stu[t].num=num; scanf(\"%d\ printf(\"\\r\\\\请输入姓名:\"); scanf(\"%s\ printf(\"\\r\\\\请输入性别:\"); scanf(\"%s\ printf(\"\\r\\\\请输入语文成绩:\"); scanf(\"%f\ printf(\"\\r\\\\请输入数学成绩:\"); scanf(\"%f\ printf(\"\\r\\\\请输入英语成绩:\"); scanf(\"%f\ stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3; stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese; printf(\"\ 学号\姓名\性别\语文\数学\英语\总分\平均分\\n\"); //打印信息 printf(\"\ %4ld\\ printf(\" %s\\ printf(\" %s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); printf(\"\\r\\\\修改的信息是否正确???y/n \"); //确认 printf(\"\\r\\\\修改成功!\\n\\n\"); scanf(\"%s\if(z=='y') { //savefile(stu,n);//保存写入信息 printf(\"\\r\\\是否继续? y/n??? \"); scanf(\"%s\ if(z=='y'||z=='Y') modify(stu,n); } else { printf(\"\\r\\\\请重新修改!\"); modify(stu,n); } } } } if(a==0) { //printf(\"你确定要更改以上信息?y/n??\\n\"); printf(\"\\r\\\\sorry!找不到该学生\\n\"); printf(\"\\r\\\\是否重新输入? y/n??? \");//重新输入 scanf(\"%s\ } } if(z=='y') modify(stu,n); //break; void init(stud stu[],int n) //打印函数,打印文件中的信息 { system(\"cls\"); int i; printf(\"\\n\\n\"); printf(\"\ 学号\姓名\性别\语文\数学\英语\总分\平均分\\n\"); for(i=0;i printf(\"%s\\ printf(\"%3.1f\%3.f\%3.1f\%5.1f%\%3.1f\\n\,stu[i].average); } printf(\"\\n\\n\\n\\n\\n\\\\"); system(\"pause\"); } void savefile(stud stu[],int n) //保存函数,保存写入信息 { int i=0; FILE *fp; //定义文件指针 char filename[20]; //定义文件名 printf(\"输入文件名:\"); scanf(\"%s\ if((fp=fopen(filename,\"w\"))==NULL) { printf(\"\\\sorry!无法打开这个文件!\\n\"); system(\"pause\"); //return 0; } fprintf(fp,\"%d\\n\写入数据 while(i fclose(fp); //关闭文件 ex,stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average); printf(\"\\数据保存成功!\\n\"); printf(\"\\n\\n\\n\\n\\n\\\\"); system(\"pause\"); //return n; } void main() { int choice,n=0; char password[20]; // void savefile(stud stu[],int n) ;//保存函数,保存写入信息 printf(\"\\n\\n\\n\");//界面初始化 printf(\"\\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\n\\n\\n\"); printf(\"\\* --------- 欢迎进入学生成绩管理系统系统 ----------*\\n\\n\"); printf(\"\\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\n\\n\\n\"); printf (\"\\r\\\\默认密码:8\\n\\n\"); printf(\"\\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\4\\n\\n\"); printf (\"\\\ 请输入您的工作密码:\"); scanf (\"\\\%s\输入密码 if (strcmp (\"8\{ while(1) { system(\"cls\");//清屏 printf(\"\\n\\n\"); printf(\"\\r\\\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5 \\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\n\\n\"); 菜单界面 printf(\"\\r\\\\\4-----欢迎进入学生成绩管理系统 ------\\4\\n\\n\");//系统主 printf(\"\\r\\\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5 \\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\5\\n\\n\"); printf(\"\\r\\\\1. 修改学生记录 \\n\\n\"); printf(\"\\r\\\\2. 输出学生记录\\n\\n\"); printf(\"\\r\\\\3. 排序学生记录\\n\\n\"); printf(\"\\r\\\\4. 查找学生记录\\n\\n\"); printf(\"\\r\\\\5. 录入学生记录\\n\\n\"); printf(\"\\r\\\\6. 删除学生记录\\n\\n\"); printf(\"\\r\\\\7. 打开文件\\n\\n\"); printf(\"\\r\\\\8. 保存文件\\n\\n\"); printf(\"\\r\\\\9. 退出\\n\\n\"); printf(\"\\r\\\\请选择(1-9):\"); scanf(\"\\r\\\\%d\ switch(choice) { case 1: modify(stu,n); //更改 break; case 2: init(stu,n); //打印信息 break; case 3: sort(stu,n); //排序 break; case 4: search(stu,n); //查找 break; case 5: n=insert(stu,n); //charuxinxi break; case 6: n=delet(stu,n); //删除 break; case 7: n=openfile(stu,n);//da kai wen jian break; case 8: savefile(stu,n);//保存文件 break; case 9: exit(0); break; } } } } printf(\"输入密码有误!!\");
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务