C语言实现学生成绩管理系统
C语言大作业——学生成绩管理系统v2.0
//成绩管理系统v2.0#include <stdio.h>#include <stdlib.h>#define N 30void Input (long num[],int score[],int n);void Totalave (int score[],int n);void Scoredes (long num[],int score[],int n,int (*compare)(int a,int b)); int Ascending (int a,int b);void Numas (long num[],int score[],int n);void Search (long num[],int score[],int n,int x);void statistis (long num[],int score[],int n);void List (long num[],int score[],int n);int main(){int n,score[N],c,x,i;long num[N];printf("输入学生人数");scanf("%d",&n);printf("1.Input record\n");printf("2.Caculate totel and average score of course\n");printf("3.Sort in descending order by score\n");printf("4.Sort in ascending order by number\n");printf("5.Search by number\n");printf("6.Statistic analysis\n");printf("7.List record\n");printf("0.Exit\n");printf("Please enter your choice:\n");printf("\n");for(;;){scanf("%d",&c);switch(c){case 1:Input (num,score,n);printf("Please enter your choice:\n");break;case 2:Totalave (score,n);printf("Please enter your choice:\n");break;case 3:Scoredes (num,score,n,Ascending);for(i=0;i<n;i++)printf("ID:%10ld,score:%d\n",num[i],score[i]);//以长整形打印用%ld printf("Please enter your choice:\n");break;case 4:Numas (num,score,n);printf("Please enter your choice:\n");break;case 5:printf("请输入查找学号\n");scanf("%d",&x);Search (num,score,n,x);printf("Please enter your choice:\n");break;case 6:statistis (num,score,n);printf("Please enter your choice:\n");break;case 7:List (num,score,n);Totalave (score,n);printf("Please enter your choice:\n");break;case 0:exit(0);}}return 0;}void Input (long num[],int score[],int n){int i;for(i=0;i<n;i++){printf("Input student's ID and score");scanf("%ld%d",&num[i],&score[i]);}}void Totalave (int score[],int n){int i,sum=0;double ave;for(i=0;i<n;i++)sum=sum+score[i];ave=(double)sum/n;printf("Caculate total=%d,average score of course=%f\n",sum,ave); }void Scoredes (long num[],int score[],int n,int(*compare)(int a,int b)){int i,j,k,t,h;for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++){if ((*compare)(score[j],score[k]))k=j;}if(i!=k){t=score[k],h=num[k];score[k]=score[i],num[k]=num[i];score[i]=t,num[i]=h;}}}int Ascending (int a,int b){return a<b;}void Numas (long num[],int score[],int n){int i,j,k,t,h;for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++){if (num[j]<num[k])k=j;}if(i!=k){t=score[k],h=num[k];score[k]=score[i],num[k]=num[i];score[i]=t,num[i]=h;}}for(i=0;i<n;i++)printf("ID:%10ld,score:%d\n",num[i],score[i]);//以长整形打印用%ld }void Search (long num[],int score[],int n,int x){int high=n-1,low=0,mid,c=0,pos,find=0,i,j,k,t,h;for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++){if (num[j]<num[k])k=j;}if(i!=k){t=score[k],h=num[k];score[k]=score[i],num[k]=num[i];score[i]=t,num[i]=h;}}while(find==0&&low<=high){mid=(high+low)/2;if(x>num[mid])low=mid+1;else if(x<num[mid])high=mid-1;else{pos=mid;find=1;}}if(find==0)printf("not find\n");else{for(i=0;i<n;i++){if(score[i]>score[pos])c++;}printf("ID:%10ld,order:%d,score:%d\n",num[pos],c+1,score[pos]);}}void statistis (long num[],int score[],int n){int a=0,b=0,c=0,d=0,e=0,i;double A,B,C,D,E;for(i=0;i<n;i++){if(score[i]>=90)a++;else if(score[i]>=80)b++;else if(score[i]>=70)c++;else if(score[i]>=60)d++;elsee++;}A=(double)a/n*100;B=(double)b/n*100;C=(double)c/n*100;D=(double)d/n*100;E=(double)e/n*100;printf("优秀人数%d,百分比:%f%%\n",a,A);printf("良好人数%d,百分比:%f%%\n",b,B);printf("中等人数%d,百分比:%f%%\n",c,C);printf("及格人数%d,百分比:%f%%\n",d,D);printf("不及格人数%d,百分比:%f%%\n",e,E); }void List (long num[],int score[],int n){int i;for(i=0;i<n;i++){printf("ID:%10ld,score:%d\n",num[i],score[i]);}}。
学生成绩管理系统C语言源程序
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
char xueqi[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
学生成绩管理系统c语言源代码
学生成绩管理系统c语言源代码介绍学生成绩管理系统是一个能够帮助学校、教师和学生管理和查询学生成绩的软件系统。
通过该系统,教师可以录入学生的考试成绩,并进行统计和分析;学生可以查询自己的成绩和排名;学校可以通过系统生成各种报表和分析数据。
本文将介绍一个使用C语言编写的学生成绩管理系统的源代码实现。
功能设计学生成绩管理系统的功能设计可以分为以下几个主要模块:登录模块1.输入用户名和密码;2.验证用户名和密码是否匹配;3.登录成功后进入主菜单。
学生管理模块1.输入学生信息(学号、姓名、性别、年龄等);2.添加学生信息到系统中;3.删除指定学号的学生信息;4.修改指定学号的学生信息;5.查询指定学号的学生信息;6.显示所有学生的信息。
课程管理模块1.输入课程信息(课程号、课程名称、授课教师等);2.添加课程信息到系统中;3.删除指定课程号的课程信息;4.修改指定课程号的课程信息;5.查询指定课程号的课程信息;6.显示所有课程的信息。
成绩管理模块1.输入学号和课程号;2.输入成绩信息(平时成绩、期末成绩、总评成绩等);3.添加成绩信息到系统中;4.修改指定学号和课程号的成绩信息;5.查询指定学号和课程号的成绩信息;6.统计指定课程的平均成绩、最高成绩和最低成绩;7.统计指定学生的平均成绩、最高成绩和最低成绩。
数据导入与导出模块1.从文件导入学生信息和成绩信息;2.将学生信息和成绩信息导出到文件。
源代码实现以下是一个使用C语言实现的学生成绩管理系统的源代码实例:#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct {int id;char name[100];char gender[10];int age;} Student;// 定义课程结构体typedef struct {int id;char name[100];char teacher[100];} Course;// 定义成绩结构体typedef struct {int studentId;int courseId;float ordinaryGrade;float finalGrade;float totalGrade;} Grade;// 学生管理函数void addStudent(Student *students, int *studentCount) {// 添加学生信息到系统}void deleteStudent(Student *students, int *studentCount, int studentId) { // 删除指定学号的学生信息}void modifyStudent(Student *students, int studentId) {// 修改指定学号的学生信息}void queryStudent(Student *students, int studentId) {// 查询指定学号的学生信息}void displayAllStudents(Student *students, int studentCount) { // 显示所有学生的信息}// 课程管理函数void addCourse(Course *courses, int *courseCount) {// 添加课程信息到系统}void deleteCourse(Course *courses, int *courseCount, int courseId) { // 删除指定课程号的课程信息}void modifyCourse(Course *courses, int courseId) {// 修改指定课程号的课程信息}void queryCourse(Course *courses, int courseId) {// 查询指定课程号的课程信息}void displayAllCourses(Course *courses, int courseCount) {// 显示所有课程的信息}// 成绩管理函数void addGrade(Grade *grades, int *gradeCount) {// 添加成绩信息到系统}void modifyGrade(Grade *grades, int gradeCount, int studentId, int courseId) { // 修改指定学号和课程号的成绩信息}void queryGrade(Grade *grades, int gradeCount, int studentId, int courseId) { // 查询指定学号和课程号的成绩信息}void calculateCourseStatistics(Grade *grades, int gradeCount, int courseId) { // 统计指定课程的平均成绩、最高成绩和最低成绩}void calculateStudentStatistics(Grade *grades, int gradeCount, int studentId) {// 统计指定学生的平均成绩、最高成绩和最低成绩}// 数据导入与导出函数void importData() {// 从文件导入学生信息和成绩信息}void exportData() {// 将学生信息和成绩信息导出到文件}int main() {// 主程序菜单return 0;}总结学生成绩管理系统是一个非常有用的工具,可以帮助学校、教师和学生高效地管理和查询学生成绩。
c语言成绩管理系统源代码
c语言成绩管理系统源代码C语言成绩管理系统源代码一、引言C语言是一门广泛应用于计算机编程领域的高级编程语言,其简洁明了、灵活易学的特点使得其成为了众多程序员的首选。
本文将介绍一个C语言成绩管理系统的源代码,该系统可实现学生信息录入、成绩查询、成绩修改等功能。
二、需求分析1. 学生信息录入:需要输入学生姓名、学号、性别等基本信息,并且需要输入每门课程的成绩。
2. 成绩查询:可以按照学号或者姓名进行查询,查询结果包括学生基本信息和各科成绩。
3. 成绩修改:可以根据学号或者姓名进行修改,修改后需要重新保存。
三、程序设计1. 结构体定义:定义一个结构体类型student,包含姓名、学号、性别和各科成绩等基本信息。
2. 学生信息录入函数:实现输入每个学生的基本信息和各科成绩,并将其保存到文件中。
3. 成绩查询函数:根据输入的姓名或者学号查找对应的学生信息,并输出其基本信息和各科成绩。
4. 成绩修改函数:根据输入的姓名或者学号查找对应的学生信息,然后可以选择修改某一科目的成绩或者全部成绩,并将修改后的结果保存到文件中。
四、源代码以下是C语言成绩管理系统的源代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_NUM 100#define FILE_NAME "student.dat"typedef struct{char name[20];char id[20];char sex[5];float score[3];}student;void input(student *stu,int num);void output(student *stu,int num);void modify(student *stu,int num);int main(){student stu[MAX_NUM];int num=0,flag=1;FILE *fp;fp=fopen(FILE_NAME,"rb");if(fp!=NULL){fread(&num,sizeof(int),1,fp);fread(stu,sizeof(student),num,fp);fclose(fp);}while(flag){printf("\n\n\t\t学生成绩管理系统\n"); printf("\t\t1. 学生信息录入\n");printf("\t\t2. 成绩查询\n");printf("\t\t3. 成绩修改\n");printf("\t\t4. 退出系统\n");printf("\t\t请选择功能:");int choice;scanf("%d",&choice);switch(choice){case 1:input(stu,num);break;case 2:output(stu,num);break;case 3:modify(stu,num);break;case 4:flag=0;break;default:printf("输入有误,请重新输入!"); break;}fp=fopen(FILE_NAME,"wb");fwrite(&num,sizeof(int),1,fp);fwrite(stu,sizeof(student),num,fp);fclose(fp);}return 0;}void input(student *stu,int num){printf("\n\n\t\t学生信息录入\n");printf("\t\t请输入学生人数:");int n;scanf("%d",&n);if(num+n<=MAX_NUM){for(int i=num;i<num+n;i++){printf("\t\t请输入第%d个学生的姓名:",i+1); scanf("%s",stu[i].name);printf("\t\t请输入第%d个学生的学号:",i+1); scanf("%s",stu[i].id);printf("\t\t请输入第%d个学生的性别:",i+1); scanf("%s",stu[i].sex);for(int j=0;j<3;j++){printf("\t\t请输入第%d个学生的第%d门课程成绩:",i+1,j+1);scanf("%f",&stu[i].score[j]);}}num+=n;printf("\n\n\t\t录入成功!\n");}else{printf("存储空间不足,无法录入!");}}void output(student *stu,int num){printf("\n\n\t\t成绩查询\n");printf("\t\t按照姓名查询输入1,按照学号查询输入2:");int choice;scanf("%d",&choice);if(choice==1){char name[20];printf("\t\t请输入要查询的姓名:");scanf("%s",name);for(int i=0;i<num;i++){if(strcmp(stu[i].name,name)==0){printf("\t\t姓名:%s\n",stu[i].name); printf("\t\t学号:%s\n",stu[i].id);printf("\t\t性别:%s\n",stu[i].sex); for(int j=0;j<3;j++){printf("\t\t第%d门课程成绩:%.2f\n",j+1,stu[i].score[j]);}flag=1;}}if(flag==0){printf("未找到该学生信息!");}}else if(choice==2){int flag=0;printf("\t\t请输入要查询的学号:");scanf("%s",id);for(int i=0;i<num;i++){if(strcmp(stu[i].id,id)==0){printf("\t\t姓名:%s\n",stu[i].name); printf("\t\t学号:%s\n",stu[i].id);printf("\t\t性别:%s\n",stu[i].sex); for(int j=0;j<3;j++){printf("\t\t第%d门课程成绩:%.2f\n",j+1,stu[i].score[j]);}flag=1;}}if(flag==0){printf("未找到该学生信息!");}}else{printf("输入有误,请重新输入!");}}void modify(student *stu,int num){printf("\n\n\t\t成绩修改\n");printf("\t\t按照姓名修改输入1,按照学号修改输入2:");int choice;scanf("%d",&choice);if(choice==1){char name[20];int flag=0;printf("\t\t请输入要修改的学生姓名:");scanf("%s",name);for(int i=0;i<num;i++){if(strcmp(stu[i].name,name)==0){printf("\t\t姓名:%s\n",stu[i].name);printf("\t\t学号:%s\n",stu[i].id);printf("\t\t性别:%s\n",stu[i].sex);for(int j=0;j<3;j++){printf("\t\t第%d门课程成绩:%.2f\n",j+1,stu[i].score[j]);}printf("\n\n\t\t请选择修改方式:\n");printf("\t\t1. 修改某一科目成绩\n");printf("\t\t2. 修改全部科目成绩\n");int m;scanf("%d",&m);if(m==1){int k;float score;printf("\t\t请输入要修改的科目编号:"); scanf("%d",&k);if(k>=1&&k<=3){printf("\t\t请输入新的成绩:");scanf("%f",&score);stu[i].score[k-1]=score;flag=1;break;}else{printf("输入有误,请重新输入!");break;}}else if(m==2){for(int j=0;j<3;j++){printf("\t\t请输入第%d门课程成绩:",j+1); scanf("%f",&stu[i].score[j]);}flag=1;break;}}}if(flag==0){printf("未找到该学生信息!");}else{printf("\n\n\t\t修改成功!\n");}}else if(choice==2){char id[20];int flag=0;printf("\t\t请输入要修改的学生学号:");scanf("%s",id);for(int i=0;i<num;i++){if(strcmp(stu[i].id,id)==0){printf("\t\t姓名:%s\n",stu[i].name); printf("\t\t学号:%s\n",stu[i].id);printf("\t\t性别:%s\n",stu[i].sex); for(int j=0;j<3;j++){printf("\t\t第%d门课程成绩:%.2f\n",j+1,stu[i].score[j]);}printf("\n\n\t\t请选择修改方式:\n"); printf("\t\t1. 修改某一科目成绩\n"); printf("\t\t2. 修改全部科目成绩\n");int m;scanf("%d",&m);if(m==1){int k;float score;printf("\t\t请输入要修改的科目编号:"); scanf("%d",&k);if(k>=1&&k<=3){printf("\t\t请输入新的成绩:");scanf("%f",&score);stu[i].score[k-1]=score;flag=1;break;}else{printf("输入有误,请重新输入!");break;}}else if(m==2){for(int j=0;j<3;j++){printf("\t\t请输入第%d门课程成绩:",j+1); scanf("%f",&stu[i].score[j]);}flag=1;break;}}}if(flag==0){printf("未找到该学生信息!");}else{printf("\n\n\t\t修改成功!\n");}}else{printf("输入有误,请重新输入!");}}五、总结本文介绍了一个C语言成绩管理系统的源代码,该系统可实现学生信息录入、成绩查询、成绩修改等功能。
学生成绩管理系统c语言代码(供参考)
C程序学生管理系统以下是用C语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include”stdlib。
h"#include"string。
h”typedefstruct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedefstruct unit//定义接点{studentdate;struct unit*next;}unit;unit大build()//建立链表并返回指针{unit*p;if((p=(unit*)malloc(sizeof(unit)))==NULL){printf("二>初始化失败!”);return0;}else{p—>next=NULL;p-〉date.number=O;//头结点存放学生人数printf("初始化成功!\n");return p;}}void add(unit大head)//增加学生{unit*p,*q;int m,n=0;q=head-〉next;p=(unit*)malloc(sizeof(unit));printf(”二〉请输入新生姓名!\n");gets(p—>);fflush(stdin);printf("二〉请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q二二NULL)n二1;while(q){if(q->date.number==m){prinTf("二>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head-〉next;break;}else{q=q->next;if(q==NULL)n=1;}}}p一〉date。
C语言课程设计—学生成绩管理系统
#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。
h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。
C语言-学生成绩管理系统
在TC环境下吧,界面是一片的黑。
可以实现成绩的录入、查询、排序、物理删除、永久删除……记不太清楚了,当时我们的报告要求手写的,也没留下什么电子资料。
C语言还是很好学很好用的,希望对大家有帮助!#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>struct student{int id;char name[10];int age;char sex[10];char birthady[20];char address[50];char tel[15];char E_mail[30];}st[50];int i=0;void shuru() {char a;do{printf("\ninput num:");scanf("%d",&st[i].id);fflush(stdin);printf("\ninput name:");gets(st[i].name);printf("\ninput age:");scanf("%d",&st[i].age);fflush(stdin);printf("\ninput sex:");gets(st[i].sex);fflush(stdin);printf("\ninput birth:");gets(st[i].birthady);fflush(stdin);printf("\ninput address:");gets(st[i].address);printf("\ninput tell:");scanf("%s",&st[i].tel);printf("\ninput E_mail:");scanf("%s",&st[i].E_mail);printf("\nWhether input another student's information ?(y/n)");fflush(stdin);a=getchar();i++;}while(a=='y' && i<=50);}void xianshi(){int j;printf("======================XUESHENGXINXIGUANLIXITONG=============================\n");printf("num\tname\tage\tsex\tbirth\taddr tell E_mail\n");for(j=0;j<i;j++)printf("%d\t%s\t%d\t%s\t%s\t%s%12s%18s\n",st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].address,st[j].tel,st[j].E_mail);printf("============================================ZHI ZUO REN:sunqi=========\n");}void clearscreen(){getchar();system("cls");}void paixu(){int j,k;int temp;for(j=0;j<i;j++){for(k=0;k<i-1-j;k++){if(st[k].age<st[k+1].age){temp=st[k].age;st[k].age=st[k+1].age;st[k+1].age=temp;}}}xianshi();}void chazhao(){int m=0;char name[20],b;do{printf("\ninput name of student:");fflush(stdin);gets(name);for(m=0;m<20;m++){if(strcmp(name,st[m].name)==0){printf("\n\tThe student is found in %d\n",m+1);break;}}if(m>=20)printf("\n\tCan not find this student\n");else{printf("num\tname\tage\tsex\tbirth\taddr tell E_mail\n");printf("%d\t%s\t%d\t%s\t%s\t%s%12s%18s\n",st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].address,st[m].tel,st[m].E_mail); }printf("\nFind another student?(y/n)");fflush(stdin);b=getchar();}while(b=='y');}void shanchu(){char name[20],c;int a,b;do{printf("\nInput the name of delet student:\n");fflush(stdin);gets(name);for(a=0;a<i;a++){if(strcmp(name,st[a].name)==0)break;}for(b=a;b<i;b++)st[b]=st[b+1];if(a>i)printf("\tCan not find this student\n");else{i--;xianshi();}printf("\nContinue delet a student?(y/n) ");fflush(stdin);c=getchar();}while(c=='y');}void charu(){shuru();paixu();}void main(){int change;do{system("cls");printf("*****************XUESHENG XINXI GUANLIXITONG *****************\n"); printf(" 1: shuru xuesheng xingxi\n");printf(" 2: xianshi xuesheng xinxi\n");printf(" 3: chazhao xuesheng xinxi\n");printf(" 4: shanchu xuesheng xinxi\n");printf(" 5: charu xuesheng xinxi\n");printf(" 6: paixu xuesheng xinxi\n");printf(" 7: tuichu chengxu\n");printf("***************************************************************\n"); fflush(stdin);printf("shuru gongneng xuanxiang:");scanf("%d",&change);switch(change){case 1:shuru(); break;case 2:xianshi(); break;case 3:chazhao(); break;case 4:shanchu(); break; case 5:charu(); break; case 6:paixu();break; case 7:break;}getch();}while(change!=7); }。
c语言学生成绩信息管理系统源代码
C语言学生成绩信息管理系统源代码一、概述在学校教学管理工作中,学生成绩信息管理是一个至关重要的环节。
为了方便高效地进行学生成绩信息的录入、查询和管理,我们可以利用C语言编写一个学生成绩信息管理系统。
本文将介绍该系统的源代码,并对其进行详细的解释和讲解。
二、系统功能需求1. 录入学生成绩信息2. 查询学生成绩信息3. 修改学生成绩信息4. 删除学生成绩信息5. 显示所有学生成绩信息三、系统源代码实现```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct student {int id; // 学号char name[20]; // 尊称float score; // 成绩} Student;// 全局变量int count = 0; // 记录学生数量Student students[100]; // 学生数组// 录入学生成绩信息void inputStudentInfo() {printf("请输入学生学号:");scanf("d", students[count].id);printf("请输入学生尊称:");scanf("s", students[count].name); printf("请输入学生成绩:");scanf("f", students[count].score); count++;}// 查询学生成绩信息void queryStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {printf("学生信息如下:\n");printf("学号:d\n", students[i].id);printf("尊称:s\n", students[i].name);printf("成绩:.2f\n", students[i].score);return;}}printf("未找到该学生信息!\n");}// 修改学生成绩信息void modifyStudentInfo(int id, char *name, float score) { for (int i = 0; i < count; i++) {if (students[i].id == id) {strcpy(students[i].name, name);students[i].score = score;printf("修改成功!\n");return;}}printf("未找到该学生信息!\n");}// 删除学生成绩信息void deleteStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {for (int j = i; j < count - 1; j++) { students[j] = students[j + 1]; }count--;printf("删除成功!\n");return;}}printf("未找到该学生信息!\n");}// 显示所有学生成绩信息void displayAllStudentInfo() {if (count == 0) {printf("暂无学生信息!\n");return;}printf("学生成绩信息如下:\n");for (int i = 0; i < count; i++) {printf("学号:d,尊称:s,成绩:.2f\n", students[i].id, students[i].name, students[i].score);}}int m本人n() {int choice, id;char name[20];float score;while (1) {printf("欢迎使用学生成绩信息管理系统!\n");printf("1. 录入学生成绩信息\n");printf("2. 查询学生成绩信息\n");printf("3. 修改学生成绩信息\n");printf("4. 删除学生成绩信息\n");printf("5. 显示所有学生成绩信息\n");printf("6. 退出系统\n");printf("请选择操作:");scanf("d", choice);switch (choice) {case 1: // 录入学生成绩信息inputStudentInfo();break;case 2: // 查询学生成绩信息printf("请输入要查询的学生学号:"); scanf("d", id);queryStudentInfo(id);break;case 3: // 修改学生成绩信息printf("请输入要修改的学生学号:"); scanf("d", id);printf("请输入修改后的尊称:");scanf("s", name);printf("请输入修改后的成绩:");scanf("f", score);modifyStudentInfo(id, name, score); break;case 4: // 删除学生成绩信息printf("请输入要删除的学生学号:"); scanf("d", id);deleteStudentInfo(id);break;case 5: // 显示所有学生成绩信息displayAllStudentInfo();break;case 6: // 退出系统printf("感谢使用学生成绩信息管理系统!\n");exit(0);default:printf("请输入正确的操作!\n");}}return 0;}```四、系统运行效果1. 运行系统后,会出现一个菜单,根据需求选择相应的操作。
c语言课程设计学生成绩管理系统报告
c语言课程设计学生成绩管理系统报告一、教学目标本课程旨在通过C语言编程实现一个学生成绩管理系统,让学生掌握C语言的基本语法、数据结构、函数、文件操作等知识,培养学生编写程序解决实际问题的能力。
具体目标如下:1.知识目标:(1)掌握C语言的基本语法和编程技巧;(2)了解数据结构的基本概念,学会使用数组、链表等数据结构;(3)熟悉函数的定义和调用,掌握函数的参数传递和返回值;(4)掌握文件操作,了解文件读写的原理和方法。
2.技能目标:(1)能够独立编写C语言程序,解决实际问题;(2)具备良好的编程习惯,代码结构清晰、可读性强;(3)掌握调试和优化程序的方法,提高程序的运行效率;(4)学会使用版本控制系统,如Git,进行代码管理和协作开发。
3.情感态度价值观目标:(1)培养学生的编程兴趣,激发学习C语言的积极性;(2)培养学生团队协作精神,提高沟通与协作能力;(3)培养学生的问题解决能力,培养创新意识和持续学习的态度;(4)培养学生具有良好的职业道德,遵守编程规范,尊重他人代码。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、文件操作等。
具体安排如下:1.C语言基本语法:介绍C语言的数据类型、运算符、表达式、控制语句等基本概念;2.数据结构:讲解数组、链表、栈和队列等数据结构的基本原理和应用;3.函数:讲解函数的定义、声明、调用,以及函数的参数传递和返回值;4.文件操作:介绍文件的概念、文件读写的方法和技巧。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合,以激发学生的学习兴趣和主动性。
具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据结构、函数和文件操作等知识,使学生掌握课程的基本概念和编程技巧;2.案例分析法:分析实际编程案例,让学生学会将理论知识应用于实际问题解决;3.实验法:安排上机实验,让学生动手编写程序,培养实际编程能力;4.小组讨论法:学生进行小组讨论,培养团队协作和沟通能力。
学生成绩管理系统C语言版
1、2、编一程序,能计算每个学生的总分和平均分。
3、编一程序,能按输入要求打印各门课程的最高分和最低分的同学。
4、编一程序,能将五个学生的成绩按总分进行降序排序。
5、编一程序,能删除一个学生的记录;6、编一程序,能增加一个学生的记录;建立一个菜单模式的学生信息管理系统,完成功能如下:一、建立主菜单*****学生信息管理系统*****1、输入学生信息2、输出学生信息3、计算每个同学成绩的总分与平均分4、对学生成绩进行排序5、输出每门功课最高分的同学信息6、输出每门功课最低分的同学信息7、退出系统主菜单界面:二、将综合练习一中的程序改写为子程序并能通过主菜单进行调用。
先上图开发环境windows 7,vc 6.0 开始贴代码:/*************** 张海山* 10软件2班* 安庆职业技术学院* QQ:136533295******************/#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"typedef struct lode{int id;char name[20];char sex[10];int score[4];struct lode *next;}lode,*linklist;linklist input(linklist head)//输入学生信息{char cmd='y';int t,i,l;char name[10];char sex[2];int score[3]={0};//int sum;linklist p;while(cmd=='y'||cmd=='Y'){p=(linklist)malloc(sizeof(lode));printf("请输入学生的编号\n");fflush(stdin);scanf("%d",&t);p->id=t;printf("请输入学生的姓名:\n");fflush(stdin);scanf("%s",p->name);/* l=strlen(p->name);p->sex[l]='\0';/* for(i=0;i<l;i++){p->name[i]=name[i];}*/printf("请输入学生的性别:\n");fflush(stdin);scanf("%s",p->sex);/* l=strlen(p->sex);p->sex[l]='\0';/* for(i=0;i<l;i++){p->sex[i]=sex[i];}*/fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&score[0]);p->score[0]=score[0];fflush(stdin);scanf("%d",&score[1]);p->score[1]=score[1];fflush(stdin);scanf("%d",&score[2]);p->score[2]=score[2];fflush(stdin);p->next=head->next;head->next=p;printf("是否继续(y)&返回主菜单(n) y&n\n");fflush(stdin);scanf("%c",&cmd);}return head;}linklist print(linklist head){linklist p;int i=1;p=head->next;printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");while(p!=NULL){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);p=p->next;/*if(p==NULL)break;printf("%d\n",i);*/}//printf("%d\n",i);//printf("i=%d\n",i);return 0;}void avg(linklist head){int sum=0;double avg=0;linklist p;p=head->next;while(p!=NULL){sum=0;sum=p->score[1]+p->score[2]+p->score[0];avg=sum/3;printf("%s的总分为:%d\t平均分为:%.2lf\n",p->name,sum,avg);p=p->next;}}void maxmin(linklist head){linklist p;intmax1=0,max1index,min1=head->next->score[0],min1index,max2=0,max2index,min2=head->nex t->score[1],min2index,max3=0,max3index,min3=head->next->score[2],min3index;p=head->next;while(p!=NULL){if(max1<(p->score[0])){max1=p->score[0];max1index=p->id;}if(min1>=(p->score[0])){min1=p->score[0];min1index=p->id;}if(max2<(p->score[1])){max2=p->score[1];max2index=p->id;}if(min2>=(p->score[1])){min2=p->score[1];min2index=p->id;}if(max3<(p->score[2])){max3=p->score[2];max3index=p->id;}if(min3>=(p->score[2])){min3=p->score[2];min3index=p->id;}p=p->next;}printf("英语:\n");p=head->next;while(p!=NULL){if((p->id)==max1index)printf("英语最高分为:%d\t姓名为:%s\n",p->score[0],p->name);if((p->id)==min1index)printf("英语最低分为:%d\t姓名为:%s\n",p->score[0],p->name);p=p->next;}printf("数学:\n");p=head->next;while(p!=NULL){if((p->id)==max2index)printf("数学最高分为:%d\t姓名为:%s\n",p->score[1],p->name);if((p->id)==min2index)printf("数学最低分为:%d\t姓名为:%s\n",p->score[1],p->name);p=p->next;}printf("语文:\n");p=head->next;while(p!=NULL){if((p->id)==max3index)printf("语文最高分为:%d\t姓名为:%s\n",p->score[2],p->name);if((p->id)==min3index)printf("语文最低分为:%d\t姓名为:%s\n",p->score[2],p->name);p=p->next;}}void rank(linklist head){linklist p;int i=0,j,k,n=0;int sum[100];p=head->next;while(p!=NULL){n++;sum[i]=p->score[1]+p->score[2]+p->score[0];i++;p=p->next;}printf("n=%d\n",n);for(i=1;i<6;i++){for(j=0;j<6-i;j++)if(sum[j]<sum[j+1]){k=sum[j];sum[j]=sum[j+1];sum[j+1]=k;}}printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");for(i=0;i<n;i++){p=head->next;while(p!=NULL){if(sum[i]==(p->score[1]+p->score[2]+p->score[0])){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);break;}p=p->next;}}}void add(linklist head){linklist p,q;p=head;q=(linklist)malloc(sizeof(lode));printf("请输入要插入学生的序号:\n");fflush(stdin);scanf("%d",&q->id);fflush(stdin);printf("请输入学生的姓名:\n");scanf("%s",q->name);fflush(stdin);printf("请输入学生性别:\n");scanf("%s",q->sex);fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&q->score[0]);fflush(stdin);scanf("%d",&q->score[1]);fflush(stdin);scanf("%d",&q->score[2]);fflush(stdin);q->next=NULL;while(p->next!=NULL){p=p->next;}p->next=q;//p->next=NULL;}void del(linklist head){linklist p,temp;int j;p=head->next;temp=head;printf("请输入要删除学生记录的序号:\n");scanf("%d",&j);while(p!=NULL){if(p->id!=j){p=p->next;temp=temp->next;}else{temp->next=p->next;free(p);break;}}}void main(){int cmd;linklist head;head=(linklist)malloc(sizeof(lode));head->next=NULL;do{printf("\n\n |***************学生成绩管理程序***************|\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 主菜单|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 请输入选择项目:|\n");printf(" | |\n");printf(" | 1、输入学生成绩|\n");printf(" | |\n");printf(" | 2、输出学生成绩|\n");printf(" | |\n");printf(" | 3、计算总成绩、平均成绩|\n");printf(" | |\n");printf(" | 4、求最高分、最低分|\n");printf(" | |\n");printf(" | 5、排序|\n");printf(" | |\n");printf(" | 6、增加记录|\n");printf(" | |\n");printf(" | 7、删除记录|\n");printf(" | |\n");printf(" | 0、退出系统|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");scanf("%d",&cmd);switch(cmd){case 0:break; //退出系统case 1: input(head);break; //输入学生信息case 2: print(head);break; //输出学生信息case 3: avg(head);break; //求总成绩、平均数case 4: maxmin(head);break; //最高分case 5: rank(head);break; //排序case 6: add(head);break; //增加记录case 7: del(head);break; //删除记录default :printf("您输入错误!\n");}}while(cmd!=0);}因为是C语言版的要严格按照样子输入哦要不然就会出现不可预料的结果。
C语言课程设计 学生成绩管理系统
printf(" 60-70 %d %d %d %d\n",count[1],count1[1],count2[1],count3[1]);
int sum1=0,sum2=0,sum3=0,sum4=0;
float aver[4];
for(i=0;i<N;i++)
{
sum1+=s[i].score1;
sum2+=s[i].score2;
sum3+=s[i].score3;
sum4+=s[i].score4;
int count[5]={0};
int count1[5]={0};
int count2[5]={0};
int count3[5]={0};
for(i=0;i<q;i++)
{
if(s[i].score1>=0&&s[i].score1<60)
count[0]++;
count1[4]++;
}
for(i=0;i<q;i++)
{
if(s[i].score3>=0&&s[i].score3<60)
count2[0]++;
if(s[i].score3>=60&&s[i].score3<70)
count2[1]++;
c语言课程设计学生成绩管理系统代码
学生成绩管理系统是一个常见的C语言入门项目,可以帮助初学者了解循环、条件控制、结构体、文件操作等基本知识。
以下是一个简单的C语言学生成绩管理系统示例,实现了查询、添加、修改和删除学生成绩等功能。
您可以修改和扩展该代码以满足您的需求:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct {int id;char name[20];float score;} Student;void display_menu();void add_student();void find_student();void edit_student();void delete_student();void save_data();void load_data();int student_count = 0;Student students[100];int main() {load_data();while (1) {display_menu();int choice;printf("请输入您的选择:");scanf("%d", &choice);switch (choice) {case 1:find_student();break;case 2:add_student();break;case 3:edit_student();break;case 4:delete_student();break;case 5:save_data();printf("数据已保存。
\n");exit(0);default:printf("无效的选项!\n");}}return 0;}void display_menu() {printf("学生成绩管理系统\n");printf("====================\n");printf("1. 查询学生成绩\n");printf("2. 添加学生成绩\n");printf("3. 修改学生成绩\n");printf("4. 删除学生成绩\n");printf("5. 退出系统\n");printf("====================\n");}void add_student() {printf("请输入学生ID:");scanf("%d", &students[student_count].id); printf("请输入学生姓名:");scanf("%s", students[student_count].name); printf("请输入学生成绩:");scanf("%f", &students[student_count].score); student_count++;printf("学生已添加成功!\n");}void find_student() {int id;printf("请输入要查询的学生ID:");scanf("%d", &id);for (int i = 0; i < student_count; ++i) {if (students[i].id == id) {printf("ID:%d, 姓名:%s, 成绩:%.2f\n", students[i].id, students[i].name, students[i].score);return;}}printf("未找到该学生。
学生成绩管理系统c语言源代码
学生成绩管理系统c语言源代码一、引言学生成绩管理系统是一个用于管理学生信息和成绩的软件,可以方便地查询、修改和统计学生成绩。
本文将介绍一个基于C语言的学生成绩管理系统的源代码。
二、需求分析1. 功能需求(1)学生信息管理:包括添加、删除、修改和查询学生信息;(2)成绩录入:可以录入每个学生的各科成绩;(3)成绩查询:可以按照不同的条件查询学生成绩,如按照班级、科目等;(4)成绩统计:可以对所有学生的成绩进行统计分析。
2. 性能需求(1)系统响应速度快,界面友好;(2)数据存储安全可靠,数据备份方便。
三、设计思路本系统采用C语言编写,主要采用结构体和文件读写方式实现数据存储。
具体实现过程如下:1. 定义结构体类型student存储每个学生的信息,包括姓名、性别、年龄、班级和各科成绩等。
2. 采用文件读写方式将每个学生的信息存储到文件中,并在程序启动时读取文件中的数据。
3. 实现各种功能模块,包括添加/删除/修改/查询学生信息、录入学生成绩、查询成绩和统计成绩等。
4. 对查询结果进行排序和格式化输出,方便用户查看。
四、源代码以下是基于C语言的学生成绩管理系统的源代码,包括结构体定义、文件读写、各种功能模块的实现等。
为了更好地展示代码,本文将代码分为多个模块,并加入了注释说明。
1. 结构体定义/* 定义结构体类型student,用于存储每个学生的信息 */ typedef struct student{char name[20]; // 姓名char sex[10]; // 性别int age; // 年龄char class[20]; // 班级float score[3]; // 各科成绩(数学、语文、英语)}STUDENT;2. 文件读写/* 将一个学生的信息写入文件中 */void write_student(STUDENT stu){FILE *fp;fp = fopen("student.dat", "ab");fwrite(&stu, sizeof(STUDENT), 1, fp);fclose(fp);}/* 从文件中读取所有学生的信息 */int read_student(STUDENT *stu){FILE *fp;int count = 0;fp = fopen("student.dat", "rb");if (fp == NULL) return 0;while (fread(stu, sizeof(STUDENT), 1, fp) != 0) count++;fclose(fp);return count;}3. 添加/删除/修改/查询学生信息/* 添加一个学生的信息 */void add_student(){STUDENT stu;printf("请输入学生姓名:");scanf("%s", );printf("请输入学生性别:");scanf("%s", stu.sex);printf("请输入学生年龄:");scanf("%d", &stu.age);printf("请输入学生班级:");scanf("%s", stu.class);write_student(stu); // 将该学生的信息写入文件中}/* 删除一个学生的信息 */void delete_student(){STUDENT stu;char name[20];printf("请输入要删除的学生姓名:");scanf("%s", name);FILE *fp1, *fp2;fp1 = fopen("student.dat", "rb");if (fp1 == NULL)return;fp2 = fopen("temp.dat", "wb");while (fread(&stu, sizeof(STUDENT), 1, fp1) != 0)if (strcmp(, name) != 0)fwrite(&stu, sizeof(STUDENT), 1, fp2);fclose(fp1);fclose(fp2);remove("student.dat"); // 删除原文件rename("temp.dat", "student.dat"); // 将新文件重命名为原文件}/* 修改一个学生的信息 */void modify_student(){STUDENT stu;char name[20];printf("\n请输入要修改的学生姓名:");scanf("%s", name);FILE *fp;fp = fopen("student.dat","rb+");while (fread(&stu,sizeof(STUDENT),1,fp) != 0) {if (strcmp(,name) == 0){printf("请输入修改后的学生姓名:");scanf("%s", );printf("请输入修改后的学生性别:");scanf("%s", stu.sex);printf("请输入修改后的学生年龄:");scanf("%d", &stu.age);printf("请输入修改后的学生班级:");scanf("%s", stu.class);fseek(fp,-sizeof(STUDENT),SEEK_CUR); // 将文件指针回到该记录开头fwrite(&stu, sizeof(STUDENT), 1, fp); // 写入新记录break;}}fclose(fp);}/* 查询一个学生的信息 */void query_student(){STUDENT stu;char name[20];printf("\n请输入要查询的学生姓名:");scanf("%s", name);FILE *fp;fp = fopen("student.dat","rb");while (fread(&stu,sizeof(STUDENT),1,fp) != 0)if (strcmp(,name) == 0){printf("\n姓名\t性别\t年龄\t班级\t数学成绩\t语文成绩\t 英语成绩\n");printf("%s\t%s\t%d\t%s\t%.2f\t%.2f\t%.2f\n", , stu.sex, stu.age, stu.class, stu.score[0], stu.score[1],stu.score[2]); break;}fclose(fp);}4. 录入/查询/统计成绩/* 录入学生成绩 */void input_score(){STUDENT stu;char name[20];printf("\n请输入要录入成绩的学生姓名:");scanf("%s", name);FILE *fp;fp = fopen("student.dat","rb+");while (fread(&stu,sizeof(STUDENT),1,fp) != 0)if (strcmp(,name) == 0){printf("\n请输入数学成绩:");scanf("%f", &stu.score[0]);printf("请输入语文成绩:");scanf("%f", &stu.score[1]);printf("请输入英语成绩:");scanf("%f", &stu.score[2]);fseek(fp,-sizeof(STUDENT),SEEK_CUR); // 将文件指针回到该记录开头fwrite(&stu, sizeof(STUDENT), 1, fp); // 写入新记录break;}fclose(fp);}/* 按照班级查询所有学生的成绩 */void query_score_by_class(){STUDENT stu[100];int count = read_student(stu);char class_name[20];printf("\n请输入要查询的班级名称:");scanf("%s", class_name);int i;printf("\n姓名\t性别\t年龄\t班级\t数学成绩\t语文成绩\t英语成绩\n");for (i = 0; i < count; i++)if (strcmp(stu[i].class,class_name) == 0)printf("%s\t%s\t%d\t%s\t%.2f\t%.2f\t%.2f\n", stu[i].name, stu[i].sex, stu[i].age, stu[i].class, stu[i].score[0],stu[i].score[1],stu[i].score[2]);}/* 统计所有学生的成绩 */void statistics_score(){STUDENT stu[100];int count = read_student(stu);float math_sum = 0, chinese_sum = 0, english_sum = 0;int i;for (i = 0; i < count; i++){math_sum += stu[i].score[0];chinese_sum += stu[i].score[1];english_sum += stu[i].score[2];}printf("\n数学平均分:%.2f", math_sum / count);printf("\n语文平均分:%.2f", chinese_sum / count);printf("\n英语平均分:%.2f", english_sum / count);}五、总结本文介绍了一个基于C语言的学生成绩管理系统的源代码,包括结构体定义、文件读写、各种功能模块的实现等。
学生管理系统 C语言代码
#include"stdio.h"#include"stdlib.h"#include"string.h"struct stu_info1{char num[13];//学号char name[10];//姓名char sex[5];//性别char cls[20];//班级}stu1[6];struct stu_info2{char counum[6];//课程号char counam[20];//课程名称int credit;//学分}stu2[6];struct stu_info3{char num[13];//学号char counum[6];//课程号float results;//分数}stu3[12];struct stu_info4{char num[13];//学号char counum[6];//课程号float results;//分数}stu4[12];int n=11;void main(){void gengxin();void input1();void input2();void input3();void output();void xianshi();void chaxun();void printf1();void printf2();input1();input2();output();int i;loop: ;printf("*************欢迎使用分数查询系统*************\n");printf("** 请选择**\n");printf("** 1.录入2.删除无用信息(管理员功能) **\n");printf("** 3.显示4.查询(学生功能) **\n");printf("** 5.显示学生信息6.显示课程信息**\n");printf("** 7.退出**\n");printf("**********************************************\n");scanf("%d",&i);switch(i){case 1: input3();break;case 2:gengxin();break;case 3:xianshi();goto loop;case 4: chaxun();goto loop;case 5: printf1();goto loop;case 6: printf2();goto loop;case 7:break;default:printf("error");break;}}void input1()//录入结构体stu1[]{int i;FILE *fp;if((fp=fopen("A.txt","r"))==NULL){printf("can not open file\n");exit(0);}/* printf(" 学号姓名性别班级\n");*/for(i=0;i<=5;i++){fscanf(fp,"%s%s%s%s",&stu1[i].num,&stu1[i].name,&stu1[i].sex,&stu1[i].cls);/*printf("%-13s %-10s %-5s %-20s\n",stu1[i].num,stu1[i].name,stu1[i].sex,stu1[i] .cls);*/}fclose(fp);}void input2()//录入结构体stu2[]{int i;FILE *fp;if((fp=fopen("B.txt","r"))==NULL){printf("can not open file\n");exit(0);}for(i=0;i<=5;i++){fscanf(fp,"%s%s%d",&stu2[i].counum,&stu2[i].counam,&stu2[i].credit);}fclose(fp);}void input3()//录入成绩{FILE *fp;fp=fopen("C.txt","w");int a,i,j,k;float cetss;char number[13],cnum[6],mima[10];printf("请输入管理员密码\n");scanf("%s",mima);if(strcmp(mima,"abc111")==0){printf("请输入要录入学生成绩的个数\n");scanf("%d",&a);for(i=1;i<=a;i++){printf("请输入要录入的第%d同学的学号:",i);scanf("%s",number);printf("请输入要录入的第%d同学的课程号:",i);scanf("%s",cnum);for(j=0;j<=5;j++)//学号{if((strcmp(number,stu1[j].num)==0))break;}if(j<=5){for(k=0;k<=5;k++)//课程号{if(strcmp(cnum,stu2[k].counum)==0){printf("请输入要录入同学的成绩:");scanf("%f",&cetss);fprintf(fp,"%s %s %f\n",number,cnum,cetss);break;}}}if(j>5||k>5){printf("Error,please input again");i=i-1;}printf("录入成功\n");}}else{printf("密码错误\n");}}void output()// 录入结构体stu3[]{int i;FILE *fp=fopen("C.txt","r");for(i=0;i<n;i++){fscanf(fp,"%s%s%f",&stu3[i].num,&stu3[i].counum,&stu3[i].results);/*printf("%s%s%f\n",stu3[i].num,stu3[i].counum,stu3[i].results);*/ }fclose(fp);}void xianshi()// 显示成绩{int i,j;for(i=0;i<n;i++){for(j=0;j<6;j++){if((strcmp(stu3[i].num,stu1[j].num))==0)printf("%s\t",stu1[j].name);}for(j=0;j<6;j++){if(strcmp(stu3[i].counum,stu2[j].counum)==0)printf("%s\t",stu2[j].counam);}printf("%3.1f\n",stu3[i].results);}}void chaxun()//查询功能{char number[13],c;int i,j,k,a,b,d;while((c=getchar())!='Q'){a=0,b=0;//a记录学分b记录学科printf("请输入要查询同学的学号\n");scanf("%s",number);for(i=0;i<n;i++){if(strcmp(number,stu3[i].num)==0){printf("学号:%s\t",stu3[i].num);for(j=0;j<6;j++){if(strcmp(stu3[i].num,stu1[j].num)==0){printf("姓名:%s\n",stu1[j].name);}}break;}}d=i;for(i=0;i<n;i++)if(strcmp(number,stu3[i].num)==0){b=b+1;for(j=0;j<6;j++){if(strcmp(stu3[i].num,stu1[j].num)==0){for(k=0;k<6;k++){if(strcmp(stu3[i].counum,stu2[k].counum)==0)break;}break;}}if(stu3[i].results>=60){a=a+stu2[k].credit;printf("课程号:%s\t课程名称:%s\t成绩:%3.1f\t实得学分:%d\n",stu3[i].counum,stu2[k].counam,stu3[i].results,stu2[k].credit);}elseprintf("课程号:%s\t课程名称:%s\t成绩:%3.1f\t实得学分:%d\n",stu3[i].counum,stu2[k].counam,stu3[i].results,0);}if(d<n){printf("共修%d科\t\t实得总学分:%d\n",b,a);}else{printf("学号输入错误\n");}getchar();printf("退出请按Q+回车,继续查询请按回车键");}}void gengxin()//更新信息,删除C.txt中无用信息{FILE *fp;int i,j,k;char mima[10];printf("请输入管理员密码\n");scanf("%s",mima);if(strcmp(mima,"abc111")==0){fp=fopen("C.txt","w");for(i=0;i<n;i++){for(j=0;j<6;j++)if(strcmp(stu3[i].num,stu1[j].num)==0){for(k=0;k<=5;k++)if(strcmp(stu3[i].counum,stu2[k].counum)==0)break;if(k<=5){fprintf(fp,"%s %s %f\n",stu3[i].num,stu3[i].counum,stu3[i].results);}}}printf("更新C.txt成功\n");fclose(fp);}else{printf("密码错误\n");}}void printf1()//显示学生信息{int i;printf(" 学号姓名性别班级\n");for(i=0;i<=5;i++){printf("%-13s%-10s%-5s %-20s\n\n",stu1[i].num,stu1[i].name,stu1[i].sex,stu1[i].cls);}}void printf2()//显示课程信息{int i;printf(" 课程编号课程名称学分\n");for(i=0;i<=5;i++){printf("%-6s%-20s %-4d\n\n",stu2[i].counum,stu2[i].counam,stu2[i].credit);}}。
学生成绩管理系统实验C语言
学生成绩管理系统一,实验目的用C 语言实现基本的学生成绩管理系统的基本功能,完成既定要求。
二,需要处理的基础数据学生基本信息包括:①学号(如2010级14班6号写作20101406)②姓③名④性别⑤出生年月日⑤课程对应的考试成绩(外语SCORE[0]、高数SCORE[1]、C 语言SCORE[2]、马哲SCORE[3]) 平均成绩和总成绩三,系统功能1学生基本情况录入。
要求对输入的性别、出生年月日的合理性进行判断(如0代表“女”,1代表“男”,输入其他值非法,年龄不能为负,月份不能大于13等)。
2允许对已经录入的数据进行显示。
3允许进行数据的插入。
4删除基本数据的相关信息。
5基于姓名的查询。
如:姓张的所有同学。
6基于各种基本数据的统计计算。
如:①统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
②列出90分及以上、80分及以上、70分及以上、60分及以上、不及格学生清单(学号、姓名、不及格的课程和成绩)。
③统计并输出各门功课的平均成绩和总平均成绩。
④按班级统计并输出总成绩(需对学号进行解析)。
四,系统功能模块图五,数据结构设计 输入学生信息按学号删除学生信息显示链表中所有记录从文件中读入记录将链表中的记录保存到文件中按姓名查找计算学生成绩按班级查询退出struct St{char IDNumber[16]; //学号char FamilyName[16]; //姓char GivenName[16]; //名int sex; //性别(0女,1男)intBirthYear; //出生年intBirthMonth; //出生月intBirthDay; //出生日float score[4]; //成绩float sum; //总分float average; //平均分struct St *next;};六,程序结构流程图main•包含以下9个功能根据用户选择的功能实现input •录入学生基本信息,学号、姓名、性别出生日期以及各科成绩del•删除学生数据listprint•将链表中的学生信息输出searchname•按照姓名查找学生信息fsave•将链表中的学生信息保存在文件中七,模块功能 在结构流程图中已经给出。
学生成绩管理系统(C语言)
学生成绩管理系统(C语言)C语言课程设计报告一、实践的目的和要求加深对《C语言程序设计》课程所学知识的理解,进一步巩固C语言讲法规则。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力二、实践内容在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);函数的使用,结构体和文件的操作等。
三、设计说明学生成绩管理系统建立一个学生成绩管理系统。
程序运行时显示一个简单的菜单。
例如:1.信息输入(INPUT)2.信息的删除与修改3.显示当前学生成绩的记录信息,若无记录,则给出提示信息4.学生或者各个班级各门课程总分、平均分、最低分、最高分等的统计5.可以按照班级、姓名、性别、分数(可以有区间)等方式进行查询6.具有良好的交互功能7.能使用图形函数进行简单的界面设计8.具有良好的纠错功能9.退出等等程序:#include <stdio.h> /*文件操作(读文件)*/#include<dos.h>#include<stdlib.h> /*其它说明*/#include<string.h> /*字符串函数*/#include<mem.h> /*内存操作函数*/#include<conio.h> /*屏幕操作函数*/#include<ctype.h> /*字符操作函数*/#include<alloc.h> /*动态地址分配函数*/#include<time.h>#define LEN sizeof(STUDENT)#define N 3typedef struct stu /*定义结构体数组用于缓存数据*/{char grade[6];char name[5];char sex[4] ;int score[N];int sum;float average;int order;struct stu *next;}STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *head); /*删除记录*/STUDENT *sort(STUDENT *head); /*按平均分排序*/void print(STUDENT *head); /* 显示所有记录*/void name(STUDENT *head); /*姓名查找*/void grade(STUDENT *head); /*班级查找*/void sex(STUDENT *head); /*性别查找*/void average(STUDENT *head); /*按平均分查找在那个分数里*/STUDENT *statistciam(STUDENT *head);/*统计记录*/void save(STUDENT *head); /*保存文件*/STUDENT *load(); /*读文件*/STUDENT *insert(STUDENT *head,STUDENT *new); /*插入记录*/int menu_select(); /*菜单函数*/int menu_search(); /*查询菜单*/void code(); /*密码验证*//*主函数界面*/main(){int i,j,n,m;STUDENT *head,new; /*链表定义头指针*/randomize();/*开启扬声器,发出声音*/while(!bioskey(1)){j=rand()*5000;sound(j);delay(10);}nosound();/*关闭声音文件*/code();/*密码输入*/clrscr(); /*清屏*/for(;;) /*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/{ /*值不同,执行的函数不同,break 不能省略*/case 0:head=init();break; /*执行初始化*/case 1:head=create();break; /*创建链表*/case 2:head=delete(head);break; /*删除记录*/case 3:print(head);break; /*显示全部记录*/case 4:loop:printf("sreach:\n 1.grade\n \n 3.sex\n 4.average\n 5.quit\n Enter you choice(0~5):");scanf("%d",&n);switch(n){case 1:grade(head);goto loop;case 2:name(head);goto loop;case 3:sex(head);goto loop;case 4:average(head);goto loop;case 5: break;}break;/*查找记录*/case 5:sort(head);break; /*排序*/case 6:save(head);break; /*保存文件*/case 7:head=load(); break; /*读文件*/case 8:head=insert(head,&new); break; /*插入记录*/case 9:head=statistciam(head); break; /*统计记录*/case 10:exit(0); /*如菜单返回值为10程序结束*/}}}/*密码输入*/void code(){int i;char number[20];const w=10;printf("\n\t\t\t--------------------------------------------------");printf("\n\t\t\tBecause this system is busywork,Code is: 123456");printf("\n\t\t\t----------------------------------------------- ");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n\t*********************************");printf("\n\t Please Enter The Code : ");printf("\n\t*********************************\n");scanf("%s",number);printf("\n\t\t\tExamining!");for(i=0;i<=w;i++){printf("*");}if(strcmp(number,"123456")==0){printf("\n\t\t\tCode is right!press any key enter menu......");clrscr();}else{printf("\n\t\t\tCode is wrong!Please enter again : ");clrscr();code();}}/*初始化函数*/STUDENT *init(){return NULL; /*返回空指针*/}/*菜单选择函数*/menu_select(){char *menu[]={"********************************************", " Welcome to "," The student score manage system!","*****************MENU***********************", /*定义菜单字符串数组*/" 0. Init list", /*初始化*/" 1. Input list", /*输入记录*/" 2. Delete a record from list", /*从表中删除记录*/" 3. Print list ", /*显示当前学生成绩的记录信息*/" 4. Search record ", /*查询学生记录*/" 5. Sort to make new a file ", /*排序*/" 6. Save the file", /*将单链表中记录保存到文件中*/" 7. Load the file", /*从文件中读入记录*/" 8. insert record to list ", /*插入记录到表中*/" 9. statistciam record to list ", /*统计记录到表中*/" 10. Quit", /*退出*/"********************************************"," Producer:ZengWenyan ZhaoJingxiu "," Faculty Adviser:XiaoFengrui ",}; /*退出*/char s[3]; /*以字符形式保存选择号*/int c,i; /*定义整形变量*/textbackground(MAGENTA); /*设置背景颜色为粉色*/gotoxy(1,50); /*移动光标*/printf("press any key enter menu......\n"); /*压任一键进入主菜单*/getch(); /*输入任一键*/clrscr(); /*清屏幕*/gotoxy(1,1); /*移动光标*/textcolor(YELLOW); /*设置文本显示颜色为黄色*/textbackground(BLUE); /*设置背景颜色为蓝色*/gotoxy(15,2); /*移动光标*/putch(0xc9); /*输出左上角边框┏*/for(i=1;i<44;i++)putch(0xcd); /*输出上边框水平线*/putch(0xbb); /*输出右上角边框┓*/for(i=3;i<23;i++){gotoxy(15,i);putch(0xba); /*输出左垂直线*/gotoxy(59,i);putch(0xba);} /*输出右垂直线*/gotoxy(15,22);putch(0xc8); /*输出左上角边框┗*/for(i=1;i<44;i++)putch(0xcd); /*输出下边框水平线*/putch(0xbc); /*输出右下角边框┛*/window(16,3,58,21); /* 制作显示菜单的窗口,大小根据菜单条数设计*/clrscr(); /*清屏*/for(i=0;i<18;i++) /*输出主菜单数组*/{gotoxy(1,i+1);cprintf("%s",menu[i]);}textbackground(BLACK); /*设置背景颜色为黑色*/window(1,1,80,25); /*恢复原窗口大小*/gotoxy(10,23); /*移动光标*/do{printf("\n Enter you choice(0~10):"); /*在菜单窗口外显示提示信息*/scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整形数*/}while(c<0||c>10); /*选择项不在0~10之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/}/*输入函数*/STUDENT *create(){int i,s;STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/clrscr();textbackground(MAGENTA);textcolor(BLUE);for(;;){p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/if(!p) /*如果指针p为空*/{printf("\nOut of memory."); /*输出内存溢出*/return (head); /*返回头指针,下同*/}printf("Enter the grade(0:list end):");scanf("%s",p->grade);if(p->grade[0]=='0') break; /*如果班级首字符为0则结束输入*/printf("Enter the name:");scanf("%s",p->name);do{printf("Enter the sex(M or W):");scanf("%s",&p->sex[0]);if(p->sex[0]!='M'&&p->sex[0]!='W')printf("Data error,please enter again.\n");}while(p->sex[0]!='M'&&p->sex[0]!='W');printf("Please enter the %d scores\n",3); /*提示开始输入成绩*/s=0; /*计算每个学生的总分,初值为0*/for(i=0;i<N;i++) /*3门课程循环3次*/{do{printf("score%d:",i+1);scanf("%d",&p->score[i]);if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/printf("Data error,please enter again.\n");}while(p->score[i]<0 || p->score[i]>100);s=s+p->score[i]; /*累加各门成绩*/}p->sum=s; /*将总分保存*/p->average=(float)s/3; /*先用强制类型转换将s转换成float 型,再求平均值*/p->order=0; /*未排序前此值为0*/p->next=head; /*将头结点做为新输入结点的后继结点*/head=p; /*新输入结点为新的头结点*/}return(head);}/*删除记录函数*/STUDENT *delete(STUDENT *head){int n;STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/char c,s[6]; /*s[6]用来存放班级,c用来输入字母*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter the deleted grade: ");scanf("%s",s);p1=p2=head; /*给p1和p2赋初值头指针*/while(strcmp(p1->grade,s) && p1 != NULL) /*当记录的班级不是要找的,或指针不为空时*/{p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/ p1=p1->next; /*将p1指针指向下一条记录*/}if(strcmp(p1->grade,s)==0) /*班级找到了*/{printf("**************************************FOUND******** ****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d |\n", p1->grade,p1->name,p1->score[0],p1->score[1],p1->score [2],p1->sum,p1->average,p1->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");printf("Are you sure to delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/for(;;){scanf("%c",&c);if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/if(c=='y'||c=='Y'){if(p1==head) /*若p1==head,说明被删结点是首结点*/ head=p1->next; /*把第二个结点地址赋予head*/elsep2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/n=n-1;printf("\nNum %s student have been deleted.\n",s);printf("Don't forget to save.\n");break; /*删除后就跳出循环*/}}}elseprintf("\nThere is no num %s student on the list.\n",s); /*找不到该结点*/return(head);}/* 显示全部记录函数*/void print(STUDENT *head){int i=0; /* 统计记录条数*/STUDENT *p; /*移动指针*/clrscr();textbackground(MAGENTA);textcolor(BLUE);p=head; /*初值为头指针*/printf("\n************************************STUDENT******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Rec | Grade | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");while(p!=NULL){i++;printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f| %-5d |\n",i,p->grade,p->name,p->score[0],p->score[1],p->score[2],p->su m,p->average,p->order);p=p->next;}printf("-------------------------------------------------------------------------------\n");printf("**************************************END************* *************************\n");}/*姓名查找记录函数*/void name(STUDENT *head){STUDENT *p; /* 移动指针*/char s[5]; /*存放姓名用的字符数组*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter name for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4 .2f | %-5d|\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is no name %s student on the list.\n",s); /*显示没有该学生*/}/*班级查找记录函数*/void grade(STUDENT *head){STUDENT *p; /* 移动指针*/char s[6]; /*存放班级用的字符数组*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter grade for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->grade,s) && p != NULL) /*当记录班级不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is no grade %s student on the list.\n",s); /*显示没有该学生*/}/*性别查找记录函数*/void sex(STUDENT *head){STUDENT *p; /* 移动指针*/char s[4]; /*存放性别用的字符数组*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter sex for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->sex,s) && p != NULL) /*当记录的性别不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is no sex %s student on the list.\n",s); /*显示没有该学生*/}/* 用平均分进行分数段查找 */void average(STUDENT *head){STUDENT *p; /* 移动指针*/clrscr();textbackground(MAGENTA);textcolor(BLUE);p=head; /*将头指针赋给p*/if(p!=NULL&&p->average<60&&p->average>0) /*如果指针不为空且平均分在0-60之间*/{printf("\n**********************************notpass************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseif(p!=NULL&&p->average<70&&p->average>=60) /*如果指针不为空且平均分在60-70之间*/{printf("\n**********************************60-70************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}else if(p!=NULL&&p->average<80&&p->average>=70) /*如果指针不为空且平均分在70-80之间*/{printf("\n**********************************70-80************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseif(p!=NULL&&p->average<90&&p->average>=80) /*如果指针不为空且平均分在80-90之间*/{printf("\n**********************************80-90************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}else if(p!=NULL&&p->average<100&&p->average>=90) /*如果指针不为空且平均分在90-100之间*/{printf("\n**********************************90-100************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4 .2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is not average student on the list.\n"); /*显示没有该学生*/}/*保存数据到文件函数*/void save(STUDENT *head){FILE *fp; /*定义指向文件的指针*/STUDENT *p; /* 定义移动指针*/char outfile[10];printf("Enter outfile name,for example c:\\score\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,为只写方式*/{printf("Cannot open the file\n");return; /*若打不开则返回菜单*/}printf("\nSaving the file......\n");p=head; /*移动指针从头指针开始*/while(p!=NULL) /*如p不为空*/{fwrite(p,LEN,1,fp); /*写入一条记录*/p=p->next; /*指针后移*/}fclose(fp); /*关闭文件*/printf("Save the file successfully!\n");}/* 从文件读数据函数*/STUDENT *load(){STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/FILE *fp; /* 定义指向文件的指针*/char infile[10];printf("Enter infile name,for example c:\\score\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为只读方式*/{printf("Can not open the file.\n");return(head);}printf("\nLoading the file!\n");p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/if(!p1){printf("Out of memory!\n");return(head);}head=p1; /*申请到空间,将其作为头指针*/while(!feof(fp)) /*循环读数据直到文件尾结束*/{if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/if(!p1->next){printf("Out of memory!\n");return (head);}p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*指针后移,新读入数据链到当前表尾*/}p2->next=NULL; /*最后一个结点的后继指针为空*/fclose(fp);printf("You have success to read data from the file!\n");return (head);}/*按平均分排序函数*/STUDENT *sort(STUDENT *head){int i=0; /*保存名次*/STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/head->next=NULL; /*第一个结点为新表的头结点*/ while(temp!=NULL) /*当原表不为空时,进行排序*/ {t=temp; /*取原表的头结点*/temp=temp->next; /*原表头结点指针后移*/p1=head; /*设定移动指针p1,从头指针开始*/p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/while(t->average<p1->average&&p1!=NULL) /*作成绩平均分比较*/{p2=p1; /*待排序点值小,则新表指针后移*/p1=p1->next;}if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/ {t->next=p1; /*待排序点的后继为p*/head=t; /*新头结点为待排序点*/}else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/{t->next=p1; /*t的后继是p1*/p2->next=t; /*p2的后继是t*/}}p1=head; /*已排好序的头指针赋给p1,准备填写名次*/ while(p1!=NULL) /*当p1不为空时,进行下列操作*/{i++; /*结点序号*/p1->order=i; /*将结点序号赋值给名次*/p1=p1->next; /*指针后移*/}printf("Sorting is sucessful.\n"); /*排序成功*/return (head);}/*插入记录函数*/STUDENT *insert(STUDENT *head,STUDENT *new){STUDENT *p0,*p1,*p2;int n,sum1,i;p1=head; /*使p1指向第一个结点*/p0=new; /*p0指向要插入的结点*/printf("\nPlease enter a new record.\n"); /*提示输入记录信息*/printf("Enter the grade:");scanf("%s",new->grade);printf("Enter the name:");scanf("%s",new->name);do{printf("Enter the sex(M or W):");scanf("%s",&new->sex[0]);if(new->sex[0]!='M'&&new->sex[0]!='W')printf("Data error,please enter again.\n");}while(new->sex[0]!='M'&&new->sex[0]!='W');printf("Please enter the %d scores.\n",3);sum1=0; /*保存新记录的总分,初值为0*/for(i=0;i<3;i++){do{printf("score%d:",i+1);scanf("%d",&new->score[i]);if(new->score[i]>100||new->score[i]<0)printf("Data error,please enter again.\n");}while(new->score[i]>100||new->score[i]<0);sum1=sum1+new->score[i]; /*累加各门成绩*/}new->sum=sum1; /*将总分存入新记录中*/new->average=(float)sum1/3;new->order=0;if(head==NULL) /*原来的链表是空表*/{head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/ else{while((p0->average<p1->average)&&(p1->next!=NULL)) {p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*p1后移一个结点*/}if(p0->average>=p1->average){if(head==p1)head=p0; /*插到原来第一个结点之前*/else p2->next=p0; /*插到p2指向的结点之后*/p0->next=p1;}else{p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/}n=n+1; /*结点数加1*/head=sort(head); /*调用排序的函数,将学生成绩重新排序*/printf("\nStudent %s have been inserted.\n",new->name);printf("Don't forget to save the new file.\n");return(head);}/*统计学生成绩函数*/STUDENT *statistciam(STUDENT *head){floatsum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;STUDENT *p;int x,y=0,i=0;p=head;printf("1.sum and average\n2.single of average\n3.max of sum\n4.min of sum\n");scanf("%d",&x);getchar();switch(x)/*用switch语句实现功能选择*/{case 1: if(head==NULL){printf("\n There are not anyone's information !\n");return(head);}/*链表为空*/else{printf("---------------------------------------------------------\n");printf("|Grade\t|Name\t|Sc1\t|Sc2\t|Sc3\t|Sum\t|Ave\t|\n");printf("---------------------------------------------------------\n");/*打印表格域*/while(p!=NULL){sum1=p->score[0]+p->score[1]+p->score[2]; /*计算个人总分*/ave1=sum1/3;/*计算个人平均分*/printf("|%s\t|%s\t|%.1d\t|%.1d\t|%.1d\t|%.1f\t|%.1f\t|\n",p-> grade,p->name,p->score[0],p->score[1],p->score[2],sum1,ave1);/*打印结果*/printf("---------------------------------------------------------\n");/*打印表格域*/p=p->next;}}return(head);case 2: if(head==NULL){printf("\nThere are not anyone's information !\n");return(head);}/*链表为空*/while(p!=NULL){sum1=sum1+p->score[0];sum2=sum2+p->score[1];sum3=sum3+p->score[2];/*计算总分*/y=y+1;ave1=sum1/y;ave2=sum2/y;ave3=sum3/y;/*计算平均分*/p=p->next;/*使p指向下一个结点*/}printf("score1 average is%.1f\n",ave1);printf("score2 average is%.1f\n",ave2);printf("score3 average is%.1f\n",ave3);/*打印结果*/return(head);case 3:if(head==NULL){printf("\nThere are not anyone's information !\n");return(head);}/*链表为空*/max=p->score[0]+p->score[1]+p->score[2];while(i<N){i=i+1;sum1=p->score[0]+p->score[1]+p->score[2]; /*计算个人总分*/if(max<sum1)max=sum1;p=p->next;}printf("max of sum:%.1f",max);printf("\n");return(head);case 4: if(head==NULL){printf("\nThere are not anyone's information !\n");return(head);}/*链表为空*/while(p!=NULL){min=p->score[0]+p->score[1]+p->score[2];while(p!=NULL){sum2=p->score[0]+p->score[1]+p->score[2];if(min>sum2)min=sum2;p=p->next;}}printf("min of sum:%.1f",min);printf("\n");return(head);default :printf("Data error,please enter again!\n"); }return(head);}。
学生成绩管理系统C语言(附完整源代码)
学生成绩管理系统C语言(附完整源代码)学生成绩管理系统C语言(附完整源代码)课程设计报告学生成绩管理系统院系:专业:班级:完成日期: 2009年1月03日设计题目:学生成绩管理系统目录1、题目描述2、算法设计/设计思想3、结构框图、各模块的功能描述4、主体思想:5、程序的,,,流程图6、源代码1.题目描述设计一个简单的学生成绩管理系统,要求有简单的界面,程序段要分清模块,该程序应该:(1)输入学生成绩,求总分,平均分,以及排序。
(2)查询学生单科成绩,总分和平均成绩;(3)添加、修改学生成绩具有下列功能:(4)实现保存与查看功能2.算法设计/设计思想利用二维数组——定义stu[][]存储学生学号、各科成绩,总分,平均分,名次,利用文件来存储,读取数据。
详细合作是::负责inputx(),print1(),input();:卖力文件的储备和读取,main(),System(),Idea()和各挪用函数之间的连;:卖力find1(),find2(),find3(),find31(),Find();:负责del(),add(),change1(),Change();前期调试由小组配合卖力。
3.结构框图、各模块的功能描述3.1建立成就表3.1.1 input()功用是输退学生的信息,便于当前的查询、欣赏。
3.2增加3.2.1 add( )功用是向inputy()增加新的内容。
3.3.2 chance( )对单科成绩进行修改。
3.3查询3.3.1可根据学号,科目,名次,进行查询。
3.3.2查询内容包孕:该学生的各课成就、、均匀分。
3.4删除3.4.1能够输退学号删除一逻辑学生的一课成就。
3.5浏览成绩单3.5.1通过此print1()可以查看所有学生的各课成绩、总分、平均分和名次。
3.6文件()3.6.1保存以上所输入的信息以达到既是关闭窗口信息也不会丢失信息的目的。
3.6.2随时打开,修改文件。
3.7.退出功用是退出主菜单退出系意见评述功能菜单统输入增加及改查找功用退出功用菜单成就功用查输排查找学学添修某某生生加改XXX某成成就绩科绩绩绩成就按按按名学科次号目查查查找找找四、主体思想:1、斟酌到此步伐量大代码多,以是用函数挪用,分几小我去完成。
用c语言编写学生成绩管理系统
include<>umber;ame;ex;corej;otal=0;forj=0;j<M;j++otal+=stui.scorej;}}}/计算各个同学的平均分/voidavergescorevoid{ inti,j;ver=0;forj=0;j<M;j++ver+=stui.scorej;}stui.aver=stui.aver/M;ver>stuk.averk=j;ifk=j{ t=stuk;stuk=stui;stui=t;}}printf"名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n";fori=0;i<n;i++{ printf"%d\t%s\t%s\t%s\t",i+1,stui.number,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%\t",stui.total;printf"%",stui.aver;printf"\n";}}/通过输入学号查找学生成绩/voidsearchscorevoid{ chara10;umber==0umber,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%\t",stui.total;printf"%",stui.aver;printf"\n";break; 数\t2.英语\语言\n";scanf"%d",&c1;printf"\t一共有%d个记录\n",M;/总共记录数/switchc1{case1:core0;ifstuk.score0>stui.score0k=i;ifstuj.score0<stui.score0j=i;}average0=sum/M;printf"\t高数的最高分:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuj.number,,stuj.score0; printf"\t高数的最低分是:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuk.number,,stuk.score0; printf"\t高数的平均分是%\n",average0;printf"平均分低于60分的学生成员名单\n";fori=0;i<M;i++{ifstui.score0<60printf"%s\n",;}break;case2:core1;ifstuk.score1>stui.score1k=i;ifstuj.score1<stui.score1j=i;}average1=sum/M;printf"\t英语的最高分:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuj.number,,stuj.score1; printf"\t英语的最低分是:\n";printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuk.number,,stuk.score1; printf"\t英语的平均分是%\n",average1;printf"平均分低于60分的学生成员名单\n";fori=0;i<M;i++{ifstui.score1<60printf"%s\n",;}break;case3:core2;ifstuk.score2>stui.score2k=i;ifstuj.score2<stui.score2j=i;}average2=sum/M;printf"\tC语言的最高分:\n";/最高分/printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuj.number,,stuj.score2;printf"\tC语言的最低分是:\n";/最低分/printf"\t\t学号:%s姓名:%s分数:%.2f\n",stuk.number,,stuk.score2; printf"\tC语言的平均分是%\n",average2;printf"平均分低于60分的学生成员名单\n";fori=0;i<M;i++{ifstui.score2<60printf"%s\n",;}break;printf"输入错误请输入1~3之间的数\n";}sum=0;getchar;printf"是否继续进行统计y/n";getsstr;ifstr0=='y'||str0=='Y'statistic;elsebreak;}}}/修改学生成绩/voidmodifyvoid{chara10;inti,j;system"cls";printf"已经转到修改成绩菜单\n";printf"请输入需要修改成绩的学生学号\n";scanf"%s",a;fori=0;i<n;i++{ ifstrcmpa,stui.number==0{ printf"名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n";printf"%d\t%s\t%s\t%s\t",i+1,stui.number,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%",stui.total;printf"%",stui.aver;printf"\n";printf"请重新输入该学生的姓名:\n";scanf"%%s",stui.number;printf"\n";scanf"%s",;printf"请输入该学生性别\n";scanf"%s",stui.sex;printf"请重新输入该学生成绩:\n";printf"高数分\t英语分\tC语言分\n";forj=0;j<M;j++scanf"%f",&stui.scorej;printf"修改成功\n";break;umber;printf"姓名:\n";scanf"%s",;printf"输入该学生性别\n";scanf"%s",stui.sex;printf"请输入学生成绩:\n";printf"高数分\t英语分\tC语言分\n";forj=0;j<M;j++scanf"%f",&stui.scorej;printf"添加成功\n";}}/删除学生成绩/voiddelscorevoid{inti,j,c;charm,a10;umber==0{ printf"名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n";printf"%d\t%s\t%s\t%s\t",i+1,stui.number,,stui.sex;forj=0;j<M;j++printf"%\t",stui.scorej;printf"%\t",stui.total;printf"%",stui.aver;printf"\n";c=i;break;}elseprintf"未找到该学生信息\n";}printf"是否删除该学生成绩y/n\n";scanf"%s",&m;ifm=='y'{fori=c;i<n-1;i++stui=stui+1; //结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置n=n-1; //删除该学生信息后学生总数减一printf"删除成绩成功\n";}elseprintf"删除成绩失败\n";}/保存学生成绩/voidsavescorevoid{FILEfp;//定义指针inti,flag=1;charm;system"cls";printf"已经转到保存成绩菜单\n";puts"是否保存学生成绩y/n";scanf"%s",&m;ifm=='y'{ iffp=fopen"","wb"==NULL//从文件score中打开{ printf"文件打开失败\n";return;}fori=0;i<n;i++iffwrite&stui,sizeofstructstudent,1,fp=1//学生成绩写入{ printf"保存失败\n";flag=0;}ifflag==1printf"保存成功\n";fclosefp;//界面关闭}elsereturn;}。
学生成绩管理系统(数据结构C语言版源代码)
学生成绩管理系统(数据结构C语言版源代码)-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII#include<stdio.h>#include<string.h>#include<stdlib.h>struct students{char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *next; /*用与构建连表指向下一结点*/};FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct students *head);/*浏览全部学生信息*/struct students * create(struct students *head,int *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/struct students * Delete(struct students * head,char m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");printf("---------------------------------------------------\n");printf(" 1-添加新同学 2-浏览学生信息 \n");printf(" 3-按学号查询 4-按姓名查询 \n");printf(" 5-按成绩排序 6-修改学生信息 \n");printf(" 7-删除学生信息 0-退出系统 \n");printf("---------------------------------------------------\n");printf("___________________________________________________\n");}/*排序菜单*/void Sortmenu(){printf("\n\n");printf("***************************************************\n");printf(" 按成绩排序 \n");printf(" 1-大学英语 2-JAVA编程 \n");printf(" 3-数据结构 4-数字逻辑电路 \n");printf(" 5-计算机组成原理 0-返回上级菜单 \n");printf("***************************************************\n");}/*修改菜单*/void Revisemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" 1--修改学生姓名 2--修改学生学号 \n");printf(" 3--修改学生性别 4--修改英语成绩 \n");printf(" 5--修改JAVA成绩 6--修改数据结构 \n");printf(" 7--修改数字电路 8--修改计算计 \n");printf(" 0--返回上级菜单 \n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}/*安全验证*/void secret(){char a[20];printf("**欢迎来到学生信息管理系统,进入系统前请先进行密码验证---");printf(" ");do{gets(a); /*输入密码*/system("cls"); /*调用库函数清屏*/printf("对不起!您输入的密码有误,请重新输入---");}while(strcmp(a,"0605")!=0); /*单一密码"0605"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1,*p2,*head; /*建立辅助结点及头结点*/char Name;int n=0,x;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");p1=(struct students *)malloc(sizeof(struct students));head=p2=p1;do{ /*使用do while语句输入学生信息*/scanf("%s",&p1->Name);if(strcmp(p1->Name,"#")==0)break; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf",p1->Num,p1->Sex,&p1->English,&p1->Java,&p1->Sjjg,&p1->Szdl,&p1->Jsj);Name='#';p1=(struct students *)malloc(sizeof(struct students));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("学生信息输入结束!\n");getchar();printf("是否保存学生信息(1.是/2.否):");scanf("%d",&x);if(x==1)fprint(head); /*调用函数保存至文件*/elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt","a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp,"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", p1->Name,p1->Num,p1->Sex,p1->English,p1->Java,p1->Sjjg,p1->Szdl,p1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt","w"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp,"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", p1->Name,p1->Num,p1->Sex,p1->English,p1->Java,p1->Sjjg,p1->Szdl,p1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/;getchar();}/*浏览全部学生信息*/void Browse(struct students *head){char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/if((fp=fopen("students_list.txt","a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",Name,Num,Sex,&English,&Java,&Sjjg,&Sz dl,&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",Name,Num,Sex,English,Java,Sjjg,Szdl,Jsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * head,int *n){FILE *fp;struct students*p,*p1,*p2;if((fp=fopen("students_list.txt","a+"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){(*n)++;p=(struct students *)malloc(sizeof(struct students));fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",p->Name,p->Num,p->Sex,&p->English,&p->Java,&p->Sjjg,&p->Szdl,&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head){int i=0,n=0;char b[20];struct students *p;head=create(head,&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s",b);while(p!=NULL){if(strcmp(p->Name,b)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为“%s”的学生信息!\n",b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0,n;char b[20];struct students *p;head=create(head,&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s",b);while(p!=NULL){if(strcmp(p->Num,b)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到学号为“%s”学生信息!\n",b);}/*按英语成绩排序*/void SortEnglish(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double English;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;English=p->English; /*将链表中第一个成绩赋给English*/while(p!=NULL){if((p->English)>English)/*比较*/English=p->English;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->English==English){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按JAVA成绩排序*/void SortJava(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Java;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Java=p->Java; /*将链表中第一个成绩赋给Java*/while(p!=NULL){if((p->Java)>Java)/*比较*/Java=p->Java;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数据结构排序*/void SortSjjg(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Sjjg;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/while(p!=NULL){if((p->Sjjg)>Sjjg)/*比较*/Sjjg=p->Sjjg;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Sjjg==Sjjg){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/void SortSzdl(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Szdl;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/while(p!=NULL){if((p->Szdl)>Szdl)/*比较*/Szdl=p->Szdl;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Szdl==Szdl){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按计算机组成原理排序*/void SortJsj(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Jsj;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/while(p!=NULL){if((p->Jsj)>Jsj)/*比较*/Jsj=p->Jsj;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Jsj==Jsj){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * head,char m[15]){struct students *ptr1,*ptr2;int n;printf("\n所有学生信息如下:\n");Browse(head);printf("\n请输入想要删除的学生学号:");scanf("%s",m);head=create(head,&n);if(head==NULL){printf("无学生信息!\n");return head;}if((strcmp(head->Num,m)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Num,m)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Num,m)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除,并保存至文件!\n",m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0,t;char num[10];char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *head=NULL;struct students *p;printf("\n所有学生信息如下:\n");Browse(head);head=create(head,&n);printf("\n输入需要修改的学生的学号:");scanf("%s",num);p=head;while(head!=NULL){if(strcmp(p->Num,num)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n",num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d",&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s",Name);strcpy(p->Name,Name);break;case 2:printf("请输入新学号:");scanf("%s",&Num);strcpy(p->Num,Num);break;case 3:printf("请输入新性别:");scanf("%s",Sex);strcpy(p->Sex,Sex);break;case 4:printf("请输入新英语成绩:");scanf("%lf",&English);p->English=English;break;case 5:printf("请输入新Java成绩:");scanf("%lf",&Java);p->Java=Java;break;case 6:printf("请输入新数据结构成绩:");scanf("%lf",&Sjjg);p->Sjjg=Sjjg;break;case 7:printf("请输入新数字电路成绩:");scanf("%lf",&Szdl);p->Szdl=Szdl;break;case 8:printf("请输入新计算机组成原理成绩:");scanf("%lf",&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起,输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成,并储存至文件!\n");return head;}/*主函数*/void main(){int choice,ch;char m[15];struct students *head=NULL;secret();menu();while(1){printf("请输入选项:");scanf("%d",&choice);switch(choice){case 1:Input();break;case 2:system("cls");menu();Browse(head);break;case 3:system("cls");menu();FindofNum(head);break;case 4:system("cls");menu();FindofName(head);break;case 5:system("cls");Sortmenu();do{printf("请输入您的选择:");scanf("%d",&ch);switch(ch){case 1:system("cls");Sortmenu();SortEnglish(head);break;case 2:system("cls");Sortmenu();SortJava(head);break;case 3:system("cls");Sortmenu();SortSjjg(head);break;case 4:system("cls");Sortmenu();SortSzdl(head);break;case 5:system("cls");Sortmenu();SortJsj(head);break;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(head,m);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起,输入有误!");break;}}return ;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉理工大学华夏学院课程设计报告书课程名称:数据结构题目:用C语言实现成绩统计程序的设计系名:信息工程系专业班级:软件工程1121姓名:****:***2013 年 6月 28日课程设计任务书设计题目:用C语言实现成绩统计程序的设计设计目的1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法;2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现一个班的成绩统计3. 提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养;设计任务(在规定的时间内完成下列任务)〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法:(1)输入每个人的各门课程的成绩,计算每人的平均成绩;(2)按平均成绩的高低次序,打印出出个人的名次,平均成绩相同的为同一名次;(3)按名次列出每个学生的姓名和各科成绩;〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制;〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解;具体要完成的任务是:A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。
B. 写出规范的课程设计报告书;时间安排:6月24日---28日第一天布置题目,确定任务、查找相关资料第二天~第四天功能分析,编写程序,调试程序、运行系统;第五天程序验收、答辩;撰写设计报告。
具体要求1. 课程设计报告按统一通用格式书写,具体内容如下:①设计任务与要求②总体方案与说明③软件主要模块的流程图④源程序清单与注释⑤问题分析与解决方案(包括调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想);⑥小结与体会附录:①源程序(必须有简单注释)②使用说明③参考资料2.每位学生应独立完成各自的任务且每天至少在设计室工作半天;指导教师签名: 2013 年 6月 22日教研室主任(或责任教师)签名: 2013年 6月 24日1.设计题目及要求1.1设计题目用C语言实现成绩统计程序的设计。
1.2具体任务对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。
假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
2.系统设计思想2.1 系统设计思想在编写成绩统计管理系统程序的过程中运用结构体,把问题中所涉及的变量定义在结构体中,利用函数来管理学生成绩,循环语句控制所选择的选择界面,case语句进行选择。
然后利用相关变量函数把学生成绩记录下来,利用循环语句再回到选择界面,利用查找函数,统计函数来查找统计学生成绩,利用冒泡排序法来对学生平均成绩进行排序。
然后按成绩高低对学生进行排名。
2.2 系统算法设计2.2.1系统模块结构图系统结构如图2-1所示2.2.2主函数流程图主函数如图2-2所示图2-2 主函数流程图3.系统调试与运行3.1开发环境Visual C++6.0,Microsoft Windows XP3.2程序调试3.2.1主界面调试选择界面如图3-1所示图3-1 选择界面截图3.2.2成绩录入模块成绩录入界面录入界面如图3-2所示图3-2 成绩录入模块3.2.3成绩查询模块成绩查询界面如图3-3所示图3-3 成绩查询模块3.2.4成绩统计模块成绩统计界面如图3-4所示图3-4 成绩统计模块4.设计评价与修改在数据结构课程设计过程中,许多知识点都没有学过,都要靠自己到课外的资料中去查找。
在用的时候难免出现这样那样的错误。
如开始设计出来的菜单不是预想的那样,而是窗中出现混乱,要经过自己一遍遍的调试与修改,和老师同学的帮助下逐渐改进完善,最后才渐渐的成型。
运行的也基本达到所需要的运算要求。
5.心得与体会回顾起此次课程设计,我感慨颇多,从拿到题目到完成整个编程,从理论到实践,在整整一个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体。
通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。
学到了设计一个简单的系统。
要注意哪些方面。
也使我们知道自己哪些方面做得还不够。
这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。
每一次的课程设计都是一次对自己曾经学习知识的检验,通过每次的实践,使自己认识之前的不足与缺点,利于以后的改正与今后学习的发展方向,希望每一次的课程设计都能有一个很好的提高参考文献[1]詹春华李小艳黄启荃•《计算机应用基础》•科学出版社 2011.5[2]詹春华杨沙•《C语言程序设计》•科学出版社2011.8[3]谭浩强·C语言程序设计·北京·清华大学出版社,2000年1月。
[4]徐孝凯魏荣•《数据结构》•机械工业出版社•1996年[5]徐孝凯•《数据结构简明教程》•清华大学出版社•1995年[6]陈文博朱青•《数据结构与算法》•机械工业出版社•1996年附录:程序代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXN 35#define MAX_NAME 256typedef struct student //学生信息{int no;char name[MAX_NAME];double Chinese;double math;double English;double mark_ave;double mark_tot;} STUDENT;/*-----------输入信息子程序---------*/void input(STUDENT *data, int *len){int no;putchar('\n');printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1.");printf("%s\n", "格式:\n学号\n");printf("%s\n", "姓名语文数学英语");putchar('\n');printf("如:\n");printf("1\n");printf("小明 93 95 89\n");scanf("%d", &no);while(no != -1) {data[*len].no = no;scanf("%s %lf %lf %lf", data[*len].name,&data[*len].Chinese, &data[*len].math,&data[*len].English);data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len ].English)/3.0;data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len] .English;(*len)++;scanf("%d", &no);}}/*---------------输出信息子程序---------------*/void output(STUDENT *data, int len){int i;system("cls");printf("%8s", "学号");printf("%8s", "姓名");printf("%8s", "语文");printf("%8s", "数学");printf("%10s", "英语");printf("%12s", "平均分");printf("%10s", "总分");putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');for (i = 0; i< len; i++){printf("%8d", data[i].no);printf("%8s", data[i].name);printf("%8.1lf", data[i].Chinese);printf("%8.1lf", data[i].math);printf("%10.1lf", data[i].English);printf("%12.1lf", data[i].mark_ave);printf("%10.1lf", data[i].mark_tot);putchar('\n');}for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("按回车键继续.");getchar();getchar();}/*--------------排序子程序------------*/void sort(STUDENT *data, int len){int i,j,k;STUDENT temp;for (i=0; i<len-1; i++) {for (k=i, j=i+1; j<len; j++)if (data[k].mark_ave > data[j].mark_ave) k=j;if (k != i) {temp = data[i];data[i] = data[k];data[k] = temp;}}}/*--------------------搜索子程序-----------------------*/void find(STUDENT *data, int len){int find_no, result ;int i;lab: result=0;printf("%s\n", "请输入需要查找的学生的学号,退出当前菜单请输入 -1.");scanf("%d", &find_no);if (find_no == -1) return; /*exit the fine sub program*/while( data[result].no != find_no && result < len) result ++;if (result >= len ) {printf("%s\n", "未查询到相关信息");goto lab;}else {system("cls");printf("%s\n", "查询信息如下:");for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("%8s", "学号");printf("%8s", "姓名");printf("%8s", "语文");printf("%8s", "数学");printf("%10s", "英语");printf("%12s", "平均分");printf("%10s", "总分");putchar('\n');printf("%8d", data[result].no);printf("%8s", data[result].name);printf("%8.1lf", data[result].Chinese);printf("%8.1lf", data[result].math);printf("%10.1lf", data[result].English);printf("%12.1lf", data[result].mark_ave);printf("%10.1lf", data[result].mark_tot);putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');goto lab;}}/*-----------------插入子程序-------------*/void insert(STUDENT *data, int *len){int no, pos;double Chinese, math, English, mark_ave, mark_tot;int i;char name[MAX_NAME];lab: printf("%s\n", "输入新的记录,退出当前菜单请输入-1.");printf("%s\n", "格式:学号");printf("%s\n", " 姓名语文数学英语");scanf("%d", &no);if (no == -1) return;data[*len].no = no;scanf("%s %lf %lf %lf", name, &Chinese, &math, &English);mark_ave=(Chinese+math+English)/3.0;mark_tot=Chinese+math+English;pos = 0;while ((data[pos].mark_ave < mark_ave) && (pos < *len) ) pos ++;for (i = *len-1; i >= pos; i--)data[i+1] = data[i];data[pos].no = no;strcpy(data[pos].name, name);data[pos].Chinese = Chinese;data[pos].math = math;data[pos].English = English;data[pos].mark_ave = mark_ave;data[pos].mark_tot = mark_tot;(*len)++;goto lab;}/*-------------删除子程序--------------*/void delete_item(STUDENT *data, int *len){int no, i, pos;lab: pos=0;printf("%s\n", "输入需要删除的学生的学号,退出当前菜单请输入-1.");scanf("%d", &no);if (no == -1) return;while( (data[pos].no != no) && (pos < *len) ) pos = pos +1;if (pos >= *len) {printf("%s\n", "未找到需要删除的学生");goto lab;}else {for (i = pos+1;i < *len; i++)data[i-1] = data[i];*len = *len -1;if (*len == 0) {printf("%s\n", "没有任何记录,请按回车键返回.");getchar();getchar();return;}goto lab;}}/*---------------统计子程序------------*/void stat(STUDENT *data, int len){int no_59=0, no_69=0, no_79=0, no_89=0, no_100=0;int i;for (i = 0;i < len; i++) {if (data[i].mark_ave <=59) no_59++;else if (data[i].mark_ave <=69) no_69++;else if (data[i].mark_ave <=79) no_79++;else if (data[i].mark_ave <= 89) no_89++;else no_100++;}system("cls");for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("%10s", "分数");printf("%10s", "0--59");printf("%10s", "60--69");printf("%10s", "70--79");printf("%10s", "80--89");printf("%10s", "90--100");putchar('\n');putchar('\n');printf("%10s", "学生");printf("%10d", no_59);printf("%10d", no_69);printf("%10d", no_79);printf("%10d", no_89);printf("%10d", no_100);putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("按回车键返回");getchar();getchar();}/*---------------显示信息子程序------------*/void paint(){int i;system("cls");printf("%55s\n", "武汉理工大学华夏学院学生成绩管理系统\n");printf(" 制作者:武汉理工大学华夏学院软件1121班钟伟 \n");for (i = 0; i < 80; i++)putchar('=');putchar('\n');printf(" 1 输入信息 2 输出信息\n");printf(" 3 按平均分排序 4 按学号查找\n");printf(" 5 插入 6 按学号删除\n");printf(" 7 按平均分输出统计信息 8 保存到文件\n");printf(" 0 退出\n");for (i = 0; i<= 79; i++)putchar('=');putchar('\n');printf("%s\n", "请输入各操作对应的序号:");}void save(STUDENT *data, int len)//将数据保存到文件{int i;FILE *fp;fp=fopen("成绩统计表.txt","w");fprintf(fp,"%8s", "学号");fprintf(fp,"%8s", "姓名");fprintf(fp,"%8s", "语文");fprintf(fp,"%8s", "数学");fprintf(fp,"%10s", "英语");fprintf(fp,"%12s", "平均分");fprintf(fp,"%10s\n", "总分");fprintf(fp,"========================================================= ===============\n");putchar('\n');for (i = 0; i< len; i++){fprintf(fp,"%8d", data[i].no);fprintf(fp,"%8s", data[i].name);fprintf(fp,"%8.1lf", data[i].Chinese);fprintf(fp,"%8.1lf", data[i].math);fprintf(fp,"%10.1lf", data[i].English);fprintf(fp,"%12.1lf", data[i].mark_ave);fprintf(fp,"%10.1lf\n", data[i].mark_tot);}fprintf(fp,"========================================================= ===============\n");fclose(fp);printf("文件已保存到\"成绩统计表.txt\"");getchar();getchar();}/*-----------主程序--------------*/void main(){STUDENT data[MAXN];int len = 0;char ctrl_ch;paint();scanf("%c", &ctrl_ch);while (ctrl_ch != '0') {switch(ctrl_ch) {case '1':input(data, &len);break;case '2':output(data, len);break;case '3':sort(data, len);break;case '4':find(data, len);break;case '5':insert(data, &len);break;case '6':delete_item(data, &len);break;case '7':stat(data, len);break;case '8':save(data, len);break;default:if (ctrl_ch != '\n') printf("%s\n", "输入错误!");break;}if (ctrl_ch != '\n') paint();scanf("%c", &ctrl_ch);}}。