C语言程序课程设计报告郭晗.docx

上传人:b****7 文档编号:10550991 上传时间:2023-02-21 格式:DOCX 页数:25 大小:180.39KB
下载 相关 举报
C语言程序课程设计报告郭晗.docx_第1页
第1页 / 共25页
C语言程序课程设计报告郭晗.docx_第2页
第2页 / 共25页
C语言程序课程设计报告郭晗.docx_第3页
第3页 / 共25页
C语言程序课程设计报告郭晗.docx_第4页
第4页 / 共25页
C语言程序课程设计报告郭晗.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

C语言程序课程设计报告郭晗.docx

《C语言程序课程设计报告郭晗.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计报告郭晗.docx(25页珍藏版)》请在冰豆网上搜索。

C语言程序课程设计报告郭晗.docx

C语言程序课程设计报告郭晗

课程设计(论文)

 

题目名称学生成绩管理系统

课程名称C语言程序课程设计

学生姓名郭晗

学号1141303066

系、专业信息工程系、通信工程

指导教师黄同成

 

2012年6月3号

目录

1前言2

2需求分析2

2.1要求2

2.2任务2

2.3运行环境2

2.4开发工具2

3概要设计与详细设计2

3.1系统流程图2

3.2查询函数流程图3

4编码与实现4

4.1分析5

4.2具体代码实现5

4.3运行结果截图21

1)主菜单21

2)成绩录入21

3)按学号排序21

4)按成绩排序21

5)成绩查询22

5课程设计总结23

参考文献23

致谢23

1前言

编写一个程序来处理学生成绩。

通过一个结构体数组来存放输入的每一位同学的成绩(包括学期、学号、班级、姓名、四门课成绩),然后将其信息存入文件中。

并且能够完成队学生成绩的录入、修改、查询,按班级输出学生成绩单及不及格学生名单,统计学生成绩求学生的总分及平均分。

2需求分析

2.1要求

(1)用C语言实现程序设计;

(2)利用结构体进行相关信息处理;

(3)画出查询模块的流程图;

(4)系统的各个功能模块要求用函数的形式实现;

(5)界面友好(良好的人机互交),程序要有注释。

2.2任务

(1)定义一个结构体类型数组,输入每一位同学的记录(包括学期、学号、班级、姓名、四门课成绩),将其信息存入文件中;

(2)按顺序输入每个学生的信息;

(3)画出所有模块的流程图;

(4)编写代码;

(5)程序分析与调试。

2.3运行环境

(1)WINDOWS2000/XP系统

(2)TurboC2.0编译环境

2.4开发工具

C语言

3概要设计与详细设计

3.1系统流程图

 

 

 

图3.1系统流程图

3.2查询函数流程图

首先输入学号,当没有记录是显示“没有任何学生”,返回函数重新开始。

如过输入学号合格,则对已经存在的记录进行查找,最后打印信息。

函数流程图如下所示:

图3-2search()函数流程图

 

4编码与实现

4.1分析

1)本程序需要定义多个结构体,用于存放学生的相关信息。

structstudent//定义结构体

2)主函数功能比较简单,用while循环语句和switch多重选择语句来显示主界面和调用函数。

在主函数的前面要写必须的头文件,预定义语句以及全局变量的结构体。

3)利用while循环结构和else/if语句来实现增加信息的功能。

先定义5个指针*p0,*p1,*p2,*p3,*max,开始运行,当学生学号小于0时返回add函数,重新开始,而当输入0时返回菜单函数。

当输入学号符合要求时,函数向下运行,令p3=head,用else/if语句判断输入的学号是否重复,如果是则重新输入,如果不是,函数继续向下运行。

接下来利用指针来储存依次输入的语文、英语、数学、计算机成绩。

而用while结构来保证输入的成绩在0~100之间,如果不是则重新输入。

4)在C语言中无法做到删除和移动数据,所以删除记录要先将所有记录从文件中读出,删除后再将记录写回文件中。

每读出一条记录,按其在文件中的顺序做好指针链接关系,然后查处要删除的学生信息,将其在链表中删除,最后再将变动的记录重新写回文件中。

用指针,while循环和else/if结构来实现查找出要删除的学生。

5)在插入函数中利用指针,和else/if语句来实现输入的数据按照插入相应的位置。

6)利用指针、链表打开已经储存的信息。

7)先用if判断是否存在信息,如果没有则返回,如果已经存在则继续运行函数。

利用while循环语句和switch多重选择语句来实现是按照哪一种方式排名,用for,if语句来实现排名。

8)用do/while循环语句和switch多重选择语句调用各个功能函数。

9)用while循环语句和switch多重选择语句输出记录中的个人总分和平均分、单科平均分、总分最高分、总分最低分。

4.2具体代码实现

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

typedefstruct{

intnum;//学号

charname[20];//姓名

charsex[10];

intage;

doublemaths;//数学成绩

doubleenglish;//英语成绩

doublechinese;//语文成绩

doublecomputer;//计算机成绩

doubletotal;//总成绩

doubleaverage;//平均成绩

}STUDENT;//定义结构体

#defineN100

intmenu(){

chara;

do{system("cls");//运行前清零

printf("\t\t学生成绩管理系统\n");

printf("\t\t|1.输入记录\n");

printf("\t\t|2.插入\n");

printf("\t\t|3.按学号排序\n");

printf("\t\t|4.按成绩排序\n");

printf("\t\t|5.查询信息\n");

printf("\t\t|6.删除某人信息\n");

printf("\t\t|7.浏览结果\n");

printf("\t\t|0.退出\n");

printf("\t\t**********************************\n");

printf("\t\t\t给出你的选择(0-7):

");

a=getchar();

}while(a<'0'||a>'7');

return(a-'0');

}

voidinput(STUDENT*s,intsize){//输入函数

inti;

FILE*fp;

if((fp=fopen("stu.dat","wb"))==NULL){

printf("Cannotopenfile!

");

exit(0);

}

for(i=0;i

printf("输入学号:

\n");

scanf("%d",&s[i].num);

printf("输入姓名:

\n");

scanf("%s",s[i].name);

printf("输入性别:

\n");

scanf("%s",s[i].sex);

printf("输入年龄:

\n");

scanf("%d",&s[i].age);

printf("输入数学成绩:

\n");

scanf("%lf",&s[i].maths);

printf("输入英语成绩:

\n");

scanf("%lf",&s[i].english);

printf("输入语文成绩:

\n");

scanf("%lf",&s[i].chinese);

printf("输入计算机成绩:

\n");

scanf("%lf",&s[i].computer);

s[i].total=s[i].maths+s[i].chinese+s[i].english+s[i].computer;

s[i].average=s[i].total/4.0;

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voidoutput(STUDENT*s){

//输出函数

inti;

FILE*fp;

if((fp=fopen("stu.dat","rb"))==NULL){

printf("Cannotopenfile!

");

exit(0);

}

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

}

}

voidsave(){/*保存到磁盘上*/

FILE*fp;

STUDENT*s;

fp=fopen("stu.dat","wb");

inti;

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voidread(STUDENT*s,intsize){/*从磁盘内读取*/

FILE*fp;

fp=fopen("stu.dat","rb");

inti;

for(i=0;i

fread(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

 

voidfind(STUDENT*s,intsize){//按姓名查找

inti,flag=0;

charc[20];

FILE*fp;

fp=fopen("stu.dat","rb");

printf("输入要查询学生的姓名为:

\n");

scanf("%s",c);

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++)

if(strcmp(s[i].name,c)==0){

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);flag=1;

}

if(flag==0)printf("输入有误!

");

fclose(fp);

}

voidsort_by_num(STUDENT*s,intsize){//按学号排序

inti,j,n=0;

STUDENTt;

FILE*fp;

fp=fopen("stu.dat","rb");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

n++;}

for(i=0;i

for(j=i+1;j

if(s[i].num>s[j].num){

t=s[i];

s[i]=s[j];

s[j]=t;

}

}

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;i

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);}

fp=fopen("stu.dat","wb");

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voidsort_by_total(STUDENT*s,intsize){//按总分排序函数

inti,j,n=0;

STUDENTt;

FILE*fp;

fp=fopen("stu.dat","rb");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

n++;

}

for(i=0;i

for(j=i+1;j

if(s[i].total

t=s[i];

s[i]=s[j];

s[j]=t;

}

}

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;i

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);}

fp=fopen("stu.dat","wb");

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voiddel(STUDENT*s,intsize){//按学号删除函数

inti,n;

intnum;

intflag=0;

inttotal=0,m=0;

FILE*fp;

fp=fopen("stu.dat","rb");

printf("请输入要删除的学生学号:

\n");

scanf("%d",&num);

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

total++;

}

for(i=0;i

if(num==s[i].num){flag=1;

printf("\t\t要删除学生的信息");

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

for(i=i;i

s[i]=s[i+1];}

if((fp=fopen("stu.dat","wb"))==NULL){

printf("Cannotopenfile!

");

exit(0);

}

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);}}

fclose(fp);

printf("\t\t删除后的情况\n");

printf("学号姓名数学英语语文计算机总分平均\n");

fp=fopen("stu.dat","rb");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

m++;}

for(i=0;i

printf("%-12d",s[i].num);

printf("%-11s",s[i].name);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

}

if(flag==0){

printf("*******************************************");

printf("输入错误!

\n");

printf("请返回!

\n");

printf("*******************************************");}

printf("\n\n\n");

fclose(fp);

}

 

voidinsert(STUDENT*s,intsize)//按学号插入

{

inti,n=0;

inttotal=0;

FILE*fp;

fp=fopen("stu.dat","ab");

rewind(fp);

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

printf("%-7d%-6s%-6s%-4s%7.1f%7.1f%7.1f%7.1f%7.1f%7.1f\n",s[i].num,s[i].sex,s[i].age,s[i].maths,s[i].english,s[i].chinese,s[i].computer,s[i].total,s[i].average);

}

total=i;

printf("请输入要插入学生的学号:

\n");

scanf("%d",&s[size].num);

printf("输入姓名:

\n");

scanf("%s",s[size].name);

printf("输入性别:

\n");

scanf("%s",s[size].sex);

printf("输入年龄:

\n");

scanf("%d",&s[size].age);

printf("输入数学成绩:

\n");

scanf("%lf",&s[size].maths);

printf("输入英语成绩:

\n");

scanf("%lf",&s[size].english);

printf("输入语文成绩:

\n");

scanf("%lf",&s[size].chinese);

printf("输入计算机成绩:

\n");

scanf("%lf",&s[size].computer);

s[size].total=s[size].maths+s[size].chinese+s[size].english+s[size].computer;

s[size].average=s[size].total/4.0;

fwrite(&s[size],sizeof(STUDENT),1,fp);

fclose(fp);

//while(!

feof(fp))

//if(fread(&s[n],sizeof(STUDENT),1,fp))

//n++;

/*printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;i

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

}*/

}

voidmain(){//主函数

STUDENTstd[N];//定义结构体数组

intm;

while

(1){//循环保证多次应用

switch(menu()){//运用菜单函数

case1:

printf("请输入你要登记的人数:

\n");

scanf("%d",&m);

input(std,m);system("pause");break;

case2:

insert(std,N);syste

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1