c语言应用报告求学生成绩,C语言课程设计报告--学生成绩管理系统

《C语言课程设计报告--学生成绩管理系统》由会员分享,可在线阅读,更多相关《C语言课程设计报告--学生成绩管理系统(30页珍藏版)》请在人人文库网上搜索。

1、学生成绩管理系统课程设计报告2010-7-9一、程序整体规划:1.系统的基本功能数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息;数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其选修课程信息;数据的插入:插入某个学生信息;数据的查询:如按学号查询、按姓名查询等;数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息;平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息;考虑用文件把数据保存起来2、首先是结构体的定义:typedef struct message_student char number6;char name20。

2、;char sex4;float subjectnumsubs;float score;float average;int index;student;int numstus; 定义学生数目student *pointer; 指向结构体数组int lens; 次迟到时候分配内存3、部分重要函数声明:int menu_select(); 决定主界面的函数 int openfile(student stu); 打开文件的函数int findrecord(student stud); 查找信息的函数int writetotext(student stud); 保存文件的函数 void sort(st。

3、udent stu); 查找信息的函数void deleterecord(student stu,int i); 删除信息的函数void addrecord(student stud); 增加学生信息的函数void display(student stud,int n1,int n2); 数据的显示函数void sortnum(student stud); 以下几个均为排序函数void sortnum2(student stud); void sortname(student stud);void sortname2(student stud);void sortcount(student s。

4、tud);void sortcount2(student stud);4、设计思路1、主函数以switch和case语句引出其他子函数。然后进行其他子函数的调用。2、定义结构体student,让其包含如姓名性别等基本信息。同时定义结构体指针,以便后面子函数对某一项排序后输出该学生的全部信息。LENS给结构体数组分配内存。3、各个函数运行并相互调用其他子函数,例如几个排序函数全部被其它函数调用并输出结果。具体各子函数之间的关系见源代码。4、student stui表示的是一个结构体,内填大于等于0的数,这可以解释各个子函数中出现此类情况:例如strcmp(str,studi.name)=0是该结。

5、构体内的第i+1个学生满足上述条件。由Studi.变量来引用各结构体中的变量,然后用输出函数相应输出该结构体内的信息。二 程序模板细致分析:1.程序涉及的模板:主程序模板. 查询模块.删除模板. 将所有记录写入文件.输出模板.修改信息模板.录入信息模板. 和排序模板.排序模板可按如下进行分类:按学号:按学号降序排序模块.按学号升序排序模块.按姓名:按姓名降序排序模块. 按姓名升序排序模块. 按名次:按名次降序排序模块. 按名次升序排序模块.2.功能结构联系图如下图所示:主函数模板增加学生记录查询学生记录修改学生记录 学生纪录排序保存文件 打开文件统计信息现对各个功能的实现及个人认为每个功能中所。

6、用到的程序的闪光点和难点:1.增加学生记录增加学生记录已有记录是否覆盖当输入数据过多时内存的扩展输入数字为1.0,但是结果输出为男.女2已有记录是否覆盖:if(numstus!=0)printf(已有记录存在是否覆盖?(y/n)n);fflush(stdin);gets(str);if(str0=Y|str0=y)i=0;当输入数据过多时内存的扩展: (通过定义LENS开辟增加内存)if(numstuslens)lens+=50;pointer=(student *)realloc(pointer,lens*LEN);输入数字为1.0,但是结果输出为男.女: printf(请输入性别(男/女 。

7、1/0):);gets(studi.sex);if(studi.sex0=0) strcpy(studi.sex,女);else strcpy(studi.sex,男);2. 查询学生记录查询学生记录按学号,姓名,名次进行查询如何根据学号输出其相应的成绩,性别等例: 按学号查找: if(str0=1) printf(请输入学号:);fflush(stdin); 亮点:清除数据缓冲区间 gets(str);for(i=0;i=0) printf(要删除这个学生的信息吗?(y/n); 此处有一个难点就是while函数和调用其他子函数findrecord,以及解释为什么一开始要定义i为-1 4.学生。

8、纪录排序按学号:按学号降序排序模块.按学号升序排序模块.按姓名:按姓名降序排序模块. 按姓名升序排序模块. 按名次:按名次降序排序模块. 按名次升序排序模块.在排序过程中比较名次,成绩大小是不难的事情,名字通过STRCMPY函数来解决排序问题,但排序中的难点在于指针,结构体变量,结构体数组的综合应用,通过比较你的一组数据要输出所有该成员相应的信息,几个排序中指针既指明了变量的地址,也指明了结构体数组的地址。此处感觉很棘手详细如下一条典型的例子:(其余的大致相同)student temp;student *p;p=stud;for(i=0;i0)temp=*(p+j);*(p+j)=*(p+j+。

9、1);*(p+j+1)=temp;5打开文件和保存文件fgetc(fp);while(inumstus) printf(没有查找所要的信息。n);printf(按回车键退出);fflush(stdin);getchar();return -1;return i;int openfile(student stu)int i=0,j;FILE *fp;char filename20,str2;if(numstus!=0)printf(已经有记录存在,是否保存?(y/n);fflush(stdin);gets(str);if(str0=y|str0=Y)writetotext(stu);printf。

10、(请输入文件名:);fflush(stdin);gets(filename);numstus=0;if(fp=fopen(filename,rb+)=NULL)printf(无法打开该文件n);return(-1);fscanf(fp,%d,&numstus);fgetc(fp);while(i0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp; /*-按学号升序排序模块-*/ void sortnum2(student stud)int i,j;student temp;student *p;p=stud;for(i=0;i0)temp=*(p+j);*(。

11、p+j)=*(p+j+1);*(p+j+1)=temp;/*-按姓名降序排序模块-*/ void sortname(student stud)int i,j;student temp;student *p;p=stud;for(i=0;i0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;/*-按姓名升序排序模块-*/ void sortname2(student stud)int i,j;student temp;student *p;p=stud;for(i=0;i0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;/。

12、*-按名次降序排序模块-*/ void sortcount(student stud)int i,j;student temp;student *p;p=stud;for(i=0;istudj.index)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;/*-按名次升序排序-*/ void sortcount2(student stud)int i,j;student temp;student *p;p=stud;for(i=0;istudj+1.index)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;void sta。

13、tistic(student stud) /*新增功能,输出统计信息*/ int i,j=0,k=0;char c1,str2;float averagenumsubs,sum=0;if(numstus=0) printf(没有可被查找的记录n);elsewhile(1)printf(下面将统计考试成绩n);printf(请选择你要统计哪科的成绩 1.At2.Bt3.Ct4.Dtn);fflush(stdin);c1=getchar();printf(t一共有个%d记录n,numstus); /*总共记录数*/switch(c1)case 1:for(i=0;istudi.subject0) 。

14、k=i;if(studj.subject0studi.subject1) k=i;if(studj.subject1studi.subject2) k=i;if(studj.subject2studi.subject3) k=i;if(studj.subject3=0) printf(要删除这个学生的信息吗?(y/n); gets(str);if(str0=y|str0=Y)deleterecord(stud,i);count(stud);else printf(确定要修改这个学生的信息吗?(y/n);gets(str);if(str0=y|str0=Y)printf(下面请重新输入学生的信息。

15、:n);printf(请输入学号:);gets(studi.number);printf(请输入姓名:);gets(studi.name);printf(请输入性别(男/女 1/0):);gets(str);if(str0=0)strcpy(studi.sex,女);elsestrcpy(studi.sex,男);studi.score=0;printf(请按顺序输入成绩:);for(j=0;j=0)for(j=i;jstudi.score)studi.index+;/*-录入信息模块-*/ void addrecord(student stud)system(cls);int i=0,j,n。

16、um;char str5;if(numstus!=0)printf(已有记录存在是否覆盖?(y/n)n);fflush(stdin);gets(str);if(str0=Y|str0=y)i=0;else i=numstus;printf(请输入增加的学生信息条目数:);scanf(%d,&num);if(i=0)numstus=num;else numstus+=num;if(numstuslens)lens+=50;pointer=(student *)realloc(pointer,lens*LEN);printf(请输入学生信息:n);for(;inumstus;i+)printf(请输入学号:);fflush(stdin);gets(studi.number); printf(请输入姓名:);gets(studi.name);printf(请输入性别(男/女 1/0):);gets(studi.sex);if(studi.sex0=0) strcpy(studi.sex,女);else strcpy(studi.sex,男);printf(请输入各科成绩:(按ABCD的顺序):);studi.score=0;for(j=0;jnumsubs;j+)scanf(%f,&studi.subjectj); studi.score+=studi.s。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值