C语言学生信息管理系统(24页).doc
-C语言学生信息管理系统-第 24 页目录1.课程设计目的和要求 (一级标题)。32. 课程的主要内容。33实践要求:34课程设计题目描述和要求。45程序代码。4(1).文件头部,对函数要调用到的系统函数的声名。4(2).定义无空函数。5(3).主函数。6(4).显示菜单函数。6(5). 输入函数,并把输入的信息读入文件。8(6). 显示函数,对学生信息的显示。9(7).增加函数(增加学生的信息)。10(8). 删除函数。12(9). 删除函数(按学号查找删除)。12(10). 删除函数(按姓名查找到后删除)。14(11). 修改(详细对学生信息的修改)。15(12). 统计(将学生的信息全部显示出来,并判断哪个学生不极格和不极格的总人数,并将它显示出来)。17(13). 对学生信息的查找。19(14) 查找函数(用学号进行查找)。19(15). 查找(用姓名查找)。20(16).排序函数。21(17). 排序函数(按学号排序)。22(18). 排序函数(按总分排序)。23(19). 学生信息的恢复(可恢复到当初输入的状态)。24(20). 保存函数。25(21). 退出函数。256. 总结267参考书目:261.课程设计目的和要求 (一级标题)本课程设计是针对刚学完C语言的计算机类专业学生的课程设计教学。C语言是学生的第一门计算机高级语言课程,课程结束后,学生已经对C语言程序设计有了较全面的了解,但接触的基本上是为了阐述相关概念或知识点而列举的示例,都是较小的程序,程序功能单一,因此缺乏整体观点和编写一个具体实用的综合程序的思想。本课程设计的目的是要培养学生初步具有系统分析思想,并能利用开发工具开发一个简单实用的综合程序。为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力。要求学生以TC或VC为开发工具,完成一个小型应用软件的设计和开发。进一步提高学生进行程序设计的能力。2. 课程的主要内容(1)选题(2)进行系统分析(3)程序设计实现(4)系统测试(5)编写、上交课程设计报告3实践要求:(1)系统设计要实用。(2)对系统进行功能模块分析、控制模块分析正确,要画出主要功能模块的流程图。(3)编程简练,可用,界面友好,功能全面。(4)课程设计报告、流程图要清楚。4课程设计题目描述和要求本课程设计选题为“学生成绩管理系统”。系统主要功能是管理学生成绩信息,要求能实现学生成绩添加、删除、修改、查找,总分、平均分计算、按成绩排序等功能。经过分析,确定本系统结构图如下图所示:学生成绩管理系统修改学员信息显示学员信息增加学员信息删除学员信息统计学员信息查找学员信息排列学员信息恢复学员信息保存学生信息录入学员信息退出系统图1 系统结构图5程序代码。(1).文件头部,对函数要调用到的系统函数的声名.#include <stdio.h> /*将需要不得的函数包含在内*/#include <stdlib.h>#include <conio.h>#include <string.h>#define N 20 /*定义宏 N 为学生结构体的总数*/ struct student /*这义学生结构体*/ long num; char name20; char sex4; int score3; int sum; int ave;struct student stuN;int t=1,pl=0; /*定义两个全变量,学生总数变量和增加的学生变量*/(2).定义无空函数.void s(); /*以下为定义无参函数*/ void input(); /*输入*/void show(); /*显示*/void increase(); /*增项*/void delet(); /*删除*/void amend(); /*修改*/void preside(); /*统计*/void fint(); /*查找*/void arrange(); /*排序*/void resume(); /*恢复*/void save(); /*保存*/void output(); /*退出*/void deleta(); /*学号查找后删除*/void deletb(); /*姓名查找后删除*/void finta(); /*学号查找*/void fintb(); /*姓名查找*/void arranga(); /*学号排序*/void arrangb(); /*总分排序*/(3).主函数.void main() /*主函数*/ int pasword; /*这义密码*/ system("cls"); printf("nnnnnnnnnttt请输入密码,密码为:123456.n"); scanf("%d",&pasword);/*输入密码*/ if(pasword=123456) s(); else printf("密码有误,请重新输入.n"); getch(); main();(4).显示菜单函数.void s() int select,w;char k; /*定义变量*/ system("cls"); printf(" C语言课程设计.n"); /*以下显示主菜单*/ printf("1. 录入.n2. 显示.n3. 增项.n4. 删项.n5. 修改.n6. 统计.n7. 查找.n8. 排序.n9. 恢复.n10.保存.n11.退出.n"); printf("n选怿项目执行相应功能."); /*以下是显示编;定人的姓名。*/ printf("nnttttt xxx 软件(1)班 200802520124nnnttttt xxx 软件(2)班 200802520201n"); scanf("%d",&select); switch(select) case 1: input(); break; /*以下是选怿执行菜单上的哪个函数。*/ case 2: show(); break; case 3: increase();break; case 4: delet(); break; case 5: amend(); break; case 6: preside(); break; case 7: fint(); break; case 8: arrange(); break; case 9: resume(); break; case 10: save(); break; case 11: output(); break; default: w=1; if(w=1) printf("输入有误,按任意键重新选怿.n"); k=getchar(); getch(); s();(5). 输入函数,并把输入的信息读入文件.void input() /该函数为输入函数,并把输入的信息读入文件,以便再恢复。 FILE *fp; int x,count=0,i; char w,r20,o; struct student *p; /*定义变量和指向结构体的指针变量。*/ system("cls"); p=stu; printf("ttt学生信息的录入.n"); dopl+; printf("请输入第%d个学生的信息.nn",t); /*逐个步骤的实现学生信息的输入。*/ printf("学号:n"); scanf("%ld",&p->num); printf("n"); printf("姓名:n"); scanf("%s",p->name); printf("n"); printf("性别:n"); gets(r); gets(p->sex); printf("n"); printf("三门成绩:1.高数.2.C语言.3.英语.n"); for(i=0;i<3;i+) scanf("%d",&p->scorei); p->sum = p->score0 + p->score1 + p->score2; p->ave = p->sum/3; printf("nn是否要继续输入学生信息,如果是请按y;不是请按n.n"); o=getchar(); /*接收回车键。*/ w=getchar(); if(w='y' | w='Y') /*选怿是否输入更多的学生*/ t+; x=1; p+; else x=0; while(x=1); if(w='n' | w='N') if(fp=fopen("stu list","wb")=NULL) printf("can not open the filen"); return; for(i=0;i<N;i+) /*实现对学生信息读入文件,以便恢复到输入状态。*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf("file write error.n"); fclose(fp); printf("按任意键返回.n"); getch(); s();(6). 显示函数,对学生信息的显示。void show() /显示函数,对学生信息的显示。int j,i; system("cls"); printf("ttt学生成绩显示.nn"); /*以下实现显示。*/ printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8snn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); for(i=0;i<t;i+) printf("%-8ld%-8s%-8s",stui.num, stui.name, stui.sex); for(j=0;j<3;j+) printf("%-8d", stui.scorej); printf("%-8d", stui.ave); printf("%-8d", stui.sum); printf("nn"); printf("n按任意键返回.n"); getch(); s();(7).增加函数(增加学生的信息).void increase() /增加学生的信息。 int i,x; char a, w; struct student *p; system("cls"); printf("ttt你增加的信息会加到其它学生的后面.n"); p=stu+t; do /*以下是逐个学生信息的增加。*/ printf("请输入第%d个学生的信息.nn",t+1); printf("学号:n"); scanf("%ld",&p->num); printf("n"); printf("姓名:n"); scanf("%s",p->name); printf("n"); printf("性别:n"); scanf("%s",p->sex); printf("n"); printf("三门成绩:1.高数.2.C语言.3.英语.n"); for(i=0;i<3;i+) scanf("%d",&p->scorei); for(i=0;i<3;i+) p->sum = p->score0 + p->score1 + p->score2; p->ave = p->sum/3; a=getchar(); printf("n是否要继续输入学生信息,如果是请按y;不是请按n.nn"); w=getchar();p+;t+; /*判断是否继续对学生信息的增加。*/ if(w='y'|w='Y') x=1; if(w='n'|w='N') x=0;break; while(x=1); if(x=0) printf("n"); printf("按任意键返回.n"); getch(); s();(8). 删除函数。void delet() /删除函数。 int i; system("cls"); printf("ttt请选怿用哪种方式删除学生信息.n"); printf("1.学号.n2.姓名.n"); scanf("%d",&i); /*选怿用哪种方式对学生信处进行删除。*/ switch(i) case 1:deleta();break; case 2:deletb();break; default:printf("输入有误,请按任意键返回.n"); getch(); s();(9). 删除函数(按学号查找删除)。void deleta() /删除函数(按学号查找删除)。 long num_a;int z,j;char c,x,m,b,o; struct student *p; /*定义变量,接收字符。*/ system("cls"); do printf("请输入要删除的学号.n"); scanf("%ld",&num_a); /*输入学号。*/ for(p=stu;p<stu+t;p+) /*对学号判断。*/ if(p->num=num_a) break; else printf("不存在该学生,请按任意键返回.n"); getch(); s(); printf("你要删除的学生为:n"); /*显示要删除的信息。*/ printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(j=0;j<3;j+) printf("%-8d",p->scorej); printf("%-8d",p->ave); printf("%-8df",p->sum); printf("你确定要删除吗?如是请输入y;不是请输入n.n"); x=getchar(); /*接收回车键。*/ c=getchar(); if(c='y'|c='Y') /*判断是否要删除该学生的信息。*/ for(;p<stu+t;p+) *p=*(p+1); t-; if(c='n'|'N') z=0; printf("是否要继续删除:是请按 1.不是请按 2.n"); m=getchar();b=getchar();o=getchar(); while(b='y'|b='Y'); /*是否继续删除学生信息*/ printf("系统已为你删除信息,请按任意键返回.n"); getch(); s();(10). 删除函数(按姓名查找到后删除)。void deletb() /删除函数(按姓名查找到后删除)。*/ char name_b20,c,m,b,r,d; int j,z; struct student *p; system("cls"); do printf("请输入要删除的姓名.n"); gets(name_b);r=getchar(); /*输入姓名。*/ for(p=stu;p<stu+t;p+) if(strcmp(p->name,name_b)=0) /*判断是否存在该学生。*/ break; else printf("不存在该学生,请按任意键返回.n"); getch(); s(); printf("你要删除的学生为:n"); /*显示要删除的学生。*/ printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(j=0;j<3;j+) printf("%-8d",p->scorej); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("你确定要删除吗?如是请输入y;不是请输入n.n"); c=getchar(); if(c='y'|c='Y') /*判断是否确定要删除。*/ for(;p<stu+t;p+) *p=*(p+1); t-; if(c='n'|'N') z=0; printf("是否要继续删除:是请按 y.不是请按 n.n"); d=getchar(); m=getchar(); b=getchar(); while(b='y'|b='Y'); printf("请按任意键返回.n"); getch(); s();(11). 修改(详细对学生信息的修改)。void amend() /修改(详细对学生信息的修改)。 long j; int i,z,r=t; char c,d,e,f,q,u,l,v,m,k; struct student *p; system("cls"); printf(" 请输入要修改学生的学号:nn"); scanf("%ld",&j); /*输入要修改学生的学号。*/ for(p=stu;p<stu+t;p+) if(p->num=j) /*判断是否存在该学生。*/ break; else r-; if(r=0) printf("你输入的学生不存在,请按任意键返回.n"); getch(); s(); printf("n你要修改的学生为:n"); printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); /*将要修改的学生信息的显示。*/ for(j=0;j<3;j+) printf("%-8d",p->scorej); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("nn是否要修改学号:是请按y;不是请按n.nn"); l=getchar(); c=getchar(); if(c='y'|c='Y') /*以下是判断对学生的哪一个信息的修改,并选怿是否进行修改。*/ printf("请输入正确的学号:nn"); scanf("%ld",&p->num);if(c='n'|c='N') z=1; printf("是否要修改姓名:是请按y;不是请按n.nn"); q=getchar(); d=getchar(); m=getchar(); if(d='y'|d='Y') printf("请输入正确的姓名:n"); scanf("%s",p->name);u=getchar(); if(d='n'|c='N') z+; printf("n是否要修改性别:是请按y;不是请按n.nn"); e=getchar(); k=getchar(); if(e='y'|e='Y') printf("请输入正确的性别:n"); scanf("%s",p->sex); if(e='N'|e='n') z+; printf("n是否要修改三门成绩:是请按y;不是请按n.nn"); f=getchar(); if(f='y'|f='Y')printf("请输入正确的三门成绩:"); for(i=0;i<3;i+) scanf("%d",&p->scorei); p->sum = p->score0 + p->score1 + p->score2; p->ave = p->sum/3;v=getchar(); if(f='n'|f='N') printf("请按任意键返回.n"); getch(); s();(12). 统计(将学生的信息全部显示出来,并判断哪个学生不极格和不极格的总人数,并将它显示出来)。void preside() /统计(将学生的信息全部显示出来,并判断哪个学生不极格和不极格的总人数,并将它显示出来)。 int i,j,o=0,b=10,r=60; struct student *p; system("cls"); printf("ttt学生信息统计.nn"); printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8snn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); for(p=stu;p<stu+t;p+) /*显示学生信息。*/ printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(j=0;j<3;j+) printf("%-8d",p->scorej); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("nn"); printf("nnn"); printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8snn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); for(p=stu;p<stu+t;p+) for(i=0;i<3;i+) if(p->scorei<r) /*判断不极格的学生。*/ b=b-1;o=o+1; printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); /*以下是显示不极格的学生。*/ for(j=0;j<3;j+) printf("%-8d",p->scorej); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("nn");break; if(b=10) printf("nn班上所有的人都通过考试.nn");else if(b<10) printf("n以上为不极格的同学,全班不极格的人数为:%d人.nn",o); /*显示不极格学生的总人数。*/ printf("n"); printf("统计完成,请按任意键返回.n"); getch(); s();(13). 对学生信息的查找。void fint() /对学生信息的查找。 int i,m;char e; system("cls"); printf("ttt请选择用哪种方式进行查找.n"); printf("1.学号.n2.姓名.n"); scanf("%d",&i); /*输入是用姓名查找还是用学号查找。*/ switch(i) case 1: finta(); break; case 2: e=getchar();fintb(); break; default: m=1; if(m=1) printf("输入有误,请按任意键返回.n"); getch(); s();(14) 查找函数(用学号进行查找)。void finta() /查找函数(用学号进行查找)。 int i,j=t; long num_a;struct student *p; char a,b; system("cls"); printf("ttt 请输入要查找的学生学号:n"); scanf("%ld",&num_a); /*输入要查找学生的学号。*/ for(p=stu;p<stu+t;p+) j-; if(p->num=num_a) break; /*判断该学生是否存在。*/ if(j=0) printf("不存在该学生,请按任意键返回.nn"); a=getchar(); getch(); s(); printf("n你要查找的学生为:nn"); /*以下对已查找出的学生的显示。*/ printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8snn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(i=0;i<3;i+) printf("%-8d",p->scorei); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("nn查找完成,请按任意键返回."); b=getchar(); getch(); s();(15). 查找(用姓名查找)。void fintb() /查找(用姓名查找)。 char name_b20; int j=t,i; struct student *p; system("cls"); printf("ttt 请输入要查找的学生姓名:nn"); gets(name_b); /*输入姓名。*/ for(p=stu;p<stu+t;p+) j-; if(strcmp(p->name,name_b)=0) break; /*判断是否存在该学生。*/ if(j=0) printf("不存在该学生,请按任意键返回.n"); getch(); s(); printf("n你要查找的学生为:nn"); /*显示已找出的学生。*/ printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8snn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(i=0;i<3;i+) printf("%-8d",p->scorei); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("nn查找完成,请按任意键返回."); getch(); s();(16).排序函数。void arrange() /排序函数。 int i; system("cls"); printf("ttt学生信息排序.nn"); printf("请选怿用哪种方式排序:1学号;2总分.n"); scanf("%d",&i); /*输入用哪种方式排序。*/ switch(i) case 1: arranga(); break; case 2: arrangb(); break; default: printf("输入有误,请按任意键返回.n"); getch(); s();(17). 排序函数(按学号排序)。void arranga() /排序函数(按学号排序)。 int i;struct student temp;struct student *p; system("cls"); printf("ttt按学号排序.nn");/*以下是对学生信息按学号排序。*/ for(i=1;i<t;i+) for(p=stu;p<stu+t-i;p+) if(p->num<(p+1)->num) temp=*p; *p=*(p+1); *(p+1)=temp; printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8snn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); for(p=stu;p<stu+t;p+) /*显示排好序的学生信息。*/ printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(i=0;i<3;i+) printf("%-8d",p->scorei); printf("%-8d",p->ave); printf("%-8dnn",p->sum); printf("nn排序完成,请按任意键返回.n"); getch(); s();(18). 排序函数(按总分排序)。void arrangb() /排序函数(按总分排序)。 int i;struct student temp;struct student *p; system("cls"); printf(" ttt按总分排序.nn"); for(i=1;i<t;i+) for(p=stu;p<stu+t-i;p+) /*以下是按总分排序的过程。*/ if(p->sum<(p+1)->sum) temp=*p; *p=*(p+1); *(p+1)=temp; printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8sn","学号","姓名","性别","高数","C语言","英语","平均分","总分"); for(p=stu;p<stu+t;p+) /*将排好序的学生信息显示出来。*/ printf("%-8ld%-8s%-8s",p->num,p->name,p->sex); for(i=0;i<3;i+) printf("%-8d",p->scorei); printf("%-8d",p->ave); printf("%-8d",p->sum); printf("n");