c语言课程设计报告书--学生成绩管理
- 格式:doc
- 大小:415.00 KB
- 文档页数:15
C语言课程设计报告_学生成绩简单管理程序1.系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息(新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中(0)退出程序2.题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。
如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
3.感受学了将近一个学期的C语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦。
但现在想想收获也不小,以前高中学VB的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓。
看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情。
我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍。
C语言程序设计学生成绩管理系统学院计算机与软件学院班级姓名学号一、系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息(新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中(0)退出程序二、题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。
如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
三、程序正文部分#include<stdio.h> /*引用库函数*/#include<stdlib.h>#include<ctype.h>#include<string.h>typedef struct /*定义结构体数组*/{char num[10]; /*学号*/char name[20]; /*姓名*/int score; /*成绩*/}Student;Student stu[80]; /*结构体数组变量*/int menu_select() /*菜单函数*/{char c;do{system("cls"); /*运行前清屏*/printf("/t/t****Students' Grade Management System****/n"); /*菜单选择*/printf("/t/t | 1. Input Records |/n");printf("/t/t | 2. Display All Records |/n");printf("/t/t | 3. Sort |/n");printf("/t/t | 4. Insert a Record |/n");printf("/t/t | 5. Delete a Record |/n");printf("/t/t | 6. Query |/n");printf("/t/t | 7. Statistic |/n");printf("/t/t | 8. Add Records from a Text File|/n");printf("/t/t | 9. Write to a Text file |/n");printf("/t/t | 0. Quit |/n");printf("/t/t*****************************************/n"); printf("/t/t/tGive your Choice(0-9):");c=getchar(); /*读入选择*/}while(c<'0'||c>'9');return(c-'0'); /*返回选择*/}int Input(Student stud[],int n) /*输入若干条记录*/{int i=0;char sign,x[10]; /*x[10]为清除多余的数据所用*/while(sign!='n'&&sign!='N') /*判断*/{ printf("/t/t/tstudent's num:"); /*交互输入*/scanf("/t/t/t%s",stud[n+i].num);printf("/t/t/tstudent's name:");scanf("/t/t/t%s",stud[n+i].name);printf("/t/t/tstudent's score:");scanf("/t/t/t%d",&stud[n+i].score);gets(x); /*清除多余的输入*/printf("/t/t/tany more records?(Y/N)");scanf("/t/t/t%c",&sign); /*输入判断*/i++;}return(n+i);}void Display(Student stud[],int n) /*显示所有记录*/{int i;printf("/t/t/t-----------------------------------/n"); /*格式头*/ printf("/t/t/tnumber name score/n");printf("/t/t/t-----------------------------------/n");for(i=1;i<n+1;i++) /*循环输入*/{printf("/t/t/t%-16s%-15s%d/n",stud[i-1].num,stud[i-1].name,stud[i-1]. score);if(i>1&&i%10==0) /*每十个暂停*/{printf("/t/t/t-----------------------------------/n"); /*格式*/ printf("/t/t/t");system("pause");printf("/t/t/t-----------------------------------/n");}}printf("/t/t/t");system("pause");}void Sort_by_num(Student stud[],int n) /*按学号排序*/{ int i,j,*p,*q,s;char t[10];for(i=0;i<n-1;i++) /*冒泡法排序*/for(j=0;j<n-1-i;j++)if(strcmp(stud[j].num,stud[j+1].num)>0){strcpy(t,stud[j+1].num);strcpy(stud[j+1].num,stud[j].num);strcpy(stud[j].num,t);strcpy(t,stud[j+1].name);strcpy(stud[j+1].name,stud[j].name);strcpy(stud[j].name,t);p=&stud[j+1].score;q=&stud[j].score;s=*p;*p=*q;*q=s;}}int Insert_a_record(Student stud[],int n) /*插入一条记录*/{char x[10]; /*清除多余输入所用*/printf("/t/t/tstudent's num:"); /*交互式输入*/scanf("/t/t/t%s",stud[n].num);printf("/t/t/tstudent's name:");scanf("/t/t/t%s",stud[n].name);printf("/t/t/tstudent's score:");scanf("/t/t/t%d",&stud[n].score);gets(x);n++;Sort_by_num(stud,n); /*调用排序函数*/printf("/t/t/tInsert Successed!/n"); /*返回成功信息*/return(n);}int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/ { char s[20];int i=0,j;printf("/t/t/ttell me his(her) name:"); /*交互式问寻*/scanf("%s",s);while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/if(i==n){ printf("/t/t/tnot find!/n"); /*返回失败信息*/return(n);}for(j=i;j<n-1;j++) /*删除操作*/{strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j].name,stud[j+1].name);stud[j].score=stud[j+1].score;}printf("/t/t/tDelete Successed!/n"); /*返回成功信息*/return(n-1);}void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/ { char s[20];int i=0;printf("/t/t/tinput his(her) name:"); /*交互式输入*/scanf("/t/t/t%s",s);while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/if(i==n){ printf("/t/t/tnot find!/n"); /*输入失败信息*/return;}printf("/t/t/this(her) number:%s/n",stud[i].num); /*输出该学生信息*/ printf("/t/t/this(her) score:%d/n",stud[i].score);}void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/{ int i,j=0,k=0,sum=0;float aver; /*成绩平均值*/for(i=0;i<n;i++) /*循环输入判断*/{sum+=stud[i].score;if(stud[j].score>stud[i].score) j=i;if(stud[k].score<stud[i].score) k=i;}aver=1.0*sum/n;printf("/t/t/tthere are %d records./n",n); /*总共记录数*/ printf("/t/t/tthe hignest score:/n"); /*最高分*/printf("/t/t/tnumber:%s name:%sscore:%d/n",stud[j].num,stud[j].name,stud[j].score);printf("/t/t/tthe lowest score:/n"); /*最低分*/printf("/t/t/tnumber:%s name:%sscore:%d/n",stud[k].num,stud[k].name,stud[k].score);printf("/t/t/tthe average score is %5.2f/n",aver); /*平均分*/ }int AddfromText(Student stud[],int n) /*从文件中读入数据*/ { int i=0,num;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("/t/t/tInput the filename:");scanf("/t/t/t%s",filename); /*输入文件名*/if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/{ printf("/t/t/tcann't open the file/n"); /*打开失败信息*/ printf("/t/t/t");system("pause");return(n);}fscanf(fp,"%d",&num); /*读入总记录量*/while(i<num) /*循环读入数据*/{fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); i++;}n+=num;fclose(fp); /*关闭文件*/printf("/t/t/tSuccessed!/n");printf("/t/t/t");system("pause");return(n);}void WritetoText(Student stud[],int n) /*将所有记录写入文件*/{int i=0;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("/t/t/tWrite Records to a Text File/n"); /*输入文件名*/ printf("/t/t/tInput the filename:");scanf("/t/t/t%s",filename);if((fp=fopen(filename,"w"))==NULL) /*打开文件*/{printf("/t/t/tcann't open the file/n");system("pause");return;}fprintf(fp,"%d/n",n); /*循环写入数据*/while(i<n){fprintf(fp,"%-16s%-15s%d/n",stud[i].num,stud[i].name,stud[i].score); i++;}fclose(fp); /*关闭文件*/printf("Successed!/n"); /*返回成功信息*/}void main() /*主函数*/{int n=0;for(;;){switch(menu_select()) /*选择判断*/{case 1:printf("/t/t/tInput Records/n"); /*输入若干条记录*/n=Input(stu,n);break;case 2:printf("/t/t/tDisplay All Records/n"); /*显示所有记录*/Display(stu,n);break;case 3:printf("/t/t/tSort/n");Sort_by_num(stu,n); /*按学号排序*/printf("/t/t/tSort Suceessed!/n");printf("/t/t/t");system("pause");case 4:printf("/t/t/tInsert a Record/n");n=Insert_a_record(stu,n); /*插入一条记录*/printf("/t/t/t");system("pause");break;case 5:printf("/t/t/tDelete a Record/n");n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/ printf("/t/t/t");system("pause");break;case 6:printf("/t/t/tQuery/n");Query_a_record(stu,n); /*查找并显示一个记录*/printf("/t/t/t");system("pause");break;case 7:printf("/t/t/tStatistic/n");Statistic(stu,n); /*新增功能,输出统计信息*/printf("/t/t/t");system("pause");break;case 8:printf("/t/t/tAdd Records from a Text File/n");n=AddfromText(stu,n); /*新增功能,输出统计信息*/ break;printf("/t/t/tWrite to a Text file/n");WritetoText(stu,n); /*循环写入数据*/printf("/t/t/t");system("pause");break;case 0:printf("/t/t/tHave a Good Luck,Bye-bye!/n"); /*结束程序*/ printf("/t/t/t");system("pause");exit(0);}}}四、函数调用关系图注:“→”代表调用Input函数打印链表记录Display函数输入若干条记录menu_select()函数选择菜单Sort_by_num函数显示所有记录Delete_a_record函数按姓名查找,删除一条记录Query_a_record查找并显示一条记录Statistic函数输出统计信息(新增)AddfromText函数从正文中添加数据到结构体数组中Main函数Insert_a_record插入一条记录WritetoText函数将所有数据写入文件中退出程序Reverse(head)函数按学号排序五、设计测试流程1、进入界面2、输入选项1,回车;按提示输入数据:3、回到主菜单;输入选项7,回车;输入文件名:data.txt,回车;出现成功提示,则读入文件操作成功。
学生成绩管理系统c语言课程设计报告(一)学生成绩管理系统C语言课程设计报告摘要本文介绍了一款学生成绩管理系统的C语言课程设计报告。
该系统可实现学生信息的录入、成绩的计算和管理等功能。
本报告详细介绍了系统的需求分析、概要设计和实现细节等内容。
系统需求分析功能需求•系统管理员可以进行学生信息的录入、删除和修改操作。
•系统可以根据已有的学生成绩进行排名,并输出排名列表。
•系统可以查询某个学生的成绩和排名。
•系统可支持标准输出数据、文件存储数据两种方式,并提供相应的查询功能。
性能需求•系统应该能够在1秒内响应用户的操作请求。
•系统的数据存储应该具有较高的可靠性和安全性。
界面需求•系统的界面应该易于操作和友好。
•界面的色彩搭配应该符合用户的视觉需求。
概要设计总体设计•系统分为两个主要模块:学生信息管理模块和成绩查询排名模块。
•学生信息管理模块包括对学生信息的增删改查等操作。
•成绩查询排名模块可以查询学生的成绩并输出排名列表。
•数据存储采用文件存储方式,具有较高的可靠性和安全性。
数据结构设计•采用结构体的方式存储学生信息,包括学生ID、姓名、性别、年龄和成绩等信息。
struct Student{int id; //学生IDchar name[20]; //学生姓名char sex[5]; //学生性别int age; //学生年龄float score; //学生成绩};约束条件•系统仅支持标准C语言的编写。
实现细节数据存储•学生信息存储在文件中,每个学生的信息存储在一行中。
•系统启动时初始化学生信息的文件。
•系统在每次修改或录入学生信息后自动保存信息到文件中。
功能实现•学生信息管理模块实现学生信息的增删改查等操作,并将操作结果输出到文件和屏幕上。
•成绩查询排名模块实现了对某个学生的单独查询和对所有学生的排名查询,并将查询结果输出到文件和屏幕上。
总结本文针对学生成绩管理系统的C语言课程设计报告进行了介绍。
从需求分析、概要设计到实现细节,本文详细地介绍了该系统的开发过程。
c语言成绩管理系统课程设计报告一、引言:成绩管理系统是一种可以有效管理学生课程成绩的工具。
通过该系统,教师可以方便地录入、修改和查询学生的成绩,而学生和家长也可以方便地查看自己的成绩情况。
本次课程设计旨在设计一个基于C语言的成绩管理系统,实现对学生课程成绩的录入、修改和查询等功能。
二、系统设计:1. 数据结构设计:为了实现成绩管理系统的各项功能,需要设计相关的数据结构。
对于学生信息,可以设计一个结构体,包含学号、姓名、性别等字段;对于课程成绩,可以设计一个结构体,包含学号、课程名称、成绩等字段。
2. 功能设计:(1) 学生信息录入功能: 教师可以通过输入学生的学号、姓名、性别等信息,将学生信息录入系统中。
(2) 成绩录入功能: 教师可以通过输入学生的学号和课程名称,将学生的课程成绩录入系统中。
(3) 成绩修改功能: 教师可以根据学生的学号和课程名称,修改学生的课程成绩。
(4) 成绩查询功能: 学生和家长可以通过输入学生的学号,查询学生的课程成绩。
三、系统实现:1. 用户界面设计:使用C语言中的控制台窗口,通过菜单的方式显示系统功能选项,用户可以通过键盘输入选择对应的功能。
2. 数据存储设计:使用文件存储学生信息和课程成绩。
通过读取和写入文件的方式,实现数据的持久化存储。
3. 功能实现:(1) 学生信息录入功能的实现: 用户输入学生的学号、姓名、性别等信息后,将学生信息写入文件。
(2) 成绩录入功能的实现: 用户输入学生的学号、课程名称和成绩后,将成绩信息写入文件。
(3) 成绩修改功能的实现: 用户输入学生的学号、课程名称和新的成绩后,根据学号和课程名称找到对应的成绩信息并修改。
(4) 成绩查询功能的实现: 用户输入学生的学号后,根据学号在文件中查找对应的成绩信息并显示在控制台窗口。
四、系统测试:对于每一个功能,设计相应的测试用例,验证系统的正确性和稳定性。
例如,录入一个学生信息后,查询该学生的信息是否正确;录入一门课程成绩后,修改该成绩并查询是否修改成功等。
c语言课程设计学生成绩管理系统报告(一)C语言课程设计学生成绩管理系统报告介绍•学生成绩管理系统的设计背景•项目的目的和意义系统需求分析•功能需求–学生信息录入–成绩管理–查询与统计•性能需求–系统响应速度–数据存储和读取效率系统设计•系统结构•数据库设计•模块功能划分技术选型•编程语言选择:C语言•数据库选择:SQLite 实现步骤•搭建开发环境•创建学生信息录入模块•创建成绩管理模块•创建查询与统计模块•进行系统集成和测试系统遇到的问题与解决方案•内存管理问题•数据库操作问题•用户界面设计问题系统改进与优化•提升性能•增加功能•修复bug结果与展望•成果总结•可能的进一步发展方向参考资料•《C语言程序设计》•《数据库系统概念》•网上开源学生成绩管理系统案例介绍本文将介绍一款基于C语言的学生成绩管理系统的设计与开发。
学生成绩管理系统是一种用于方便高校或学校管理学生成绩的工具。
本项目的目的是提供一个简单易用、功能全面的学生成绩管理系统。
系统需求分析功能需求学生成绩管理系统需具备以下功能:1.学生信息录入:能够方便地录入学生的基本信息,包括姓名、学号、班级等。
2.成绩管理:能够记录学生的各科成绩,并能对成绩进行增、删、改、查等操作。
3.查询与统计:能够根据学号、姓名等条件进行查询,还能对成绩进行统计,包括总分、平均分等。
性能需求为确保学生成绩管理系统的良好使用体验,有以下性能需求:1.系统响应速度:系统应具备快速响应用户操作的能力,避免出现卡顿现象。
2.数据存储和读取效率:系统应能高效地存储和读取学生信息和成绩数据,以保证系统的稳定性和可靠性。
系统设计系统结构学生成绩管理系统采用前后端分离的设计方式,前端使用C语言编写,后端使用SQLite数据库进行数据存储和读取。
系统结构由三个主要模块组成:学生信息录入模块、成绩管理模块和查询与统计模块。
数据库设计系统使用SQLite数据库进行数据存储和读取。
数据库设计包括学生表和成绩表,学生表存储学生的基本信息,成绩表存储学生的各科成绩。
学生成绩管理设计报告c语言1. 引言学生成绩管理是学校教务工作中重要的一环,对于学生的学业发展和教育教学质量提升起着重要的作用。
为了更好地管理学生成绩信息,提高工作效率和信息准确性,我们设计了一款使用C语言开发的学生成绩管理系统。
本文将阐述学生成绩管理系统的需求分析、系统设计和实施方案。
2. 需求分析2.1 功能需求学生成绩管理系统应具有以下基本功能:1. 学生信息管理:包括学生基本信息的录入、编辑和删除,如学号、姓名、性别、年级等;2. 成绩录入:教师根据学生的课程成绩单,输入学生的具体成绩;3. 成绩查询:学生和教师可以查询学生的个人成绩和班级整体成绩;4. 统计分析:系统可以自动计算班级成绩的平均分、最高分、最低分等统计指标,并进行排名;5. 数据备份与恢复:对学生成绩信息进行备份和恢复,以防数据丢失。
2.2 性能需求为了满足大规模学生数量和复杂的成绩管理需求,系统需要具备以下性能要求:1. 数据处理迅速:能够在短时间内完成大规模学生信息和成绩的录入、查询和统计;2. 安全性能强:保障学生信息的安全性,防止未经授权的人员访问和修改;3. 数据准确性高:确保学生成绩数据的准确性,保证教学评价的客观性;4. 系统稳定性好:能够长时间稳定运行,不易崩溃或出现错误。
3. 系统设计3.1 数据结构设计学生成绩管理系统的数据结构设计包括学生信息结构和成绩信息结构。
c学生信息结构typedef struct {char stu_id[10]; 学号char stu_name[20]; 姓名char gender[5]; 性别int grade; 年级} Student;成绩信息结构typedef struct {char stu_id[10]; 学号char course_name[50]; 课程名float score; 分数} Score;3.2 模块设计学生成绩管理系统包括以下几个模块:1. 学生信息管理模块:用于学生信息的增、删、改、查;2. 成绩录入模块:教师根据指定格式的成绩单录入学生的成绩;3. 成绩查询模块:学生和教师可以根据学号或姓名查询学生的个人成绩和班级整体成绩;4. 统计分析模块:系统可以自动计算班级成绩的平均分、最高分、最低分等统计指标,并进行排名;5. 数据备份与恢复模块:对学生成绩信息进行备份和恢复,以防数据3.3 系统界面设计学生成绩管理系统的界面设计采用命令行界面,简洁、易用。
C语言成绩管理系统课程设计报告1. 背景成绩管理是学校管理和评估学生学习成果的重要环节。
随着学生数量的增加和课程的多样化,传统的手工管理已经无法满足需求。
因此,我们需要一个高效、准确、可靠的成绩管理系统来处理这些数据。
本课程设计旨在开发一个C语言成绩管理系统,通过计算机技术和数据库管理优化成绩管理过程,提高教学效率和数据准确性。
2. 分析2.1 功能需求本系统需满足以下功能需求:•学生信息管理:包括学号、姓名、班级等基本信息的录入、修改、查询和删除功能。
•成绩录入和修改:能够录入每个学生每门科目的成绩,允许后续修改。
•成绩查询:可以根据学号或姓名查询学生的成绩,支持按科目、总分排序查询。
•成绩统计:能够计算学生的平均分、最高分、最低分等统计数据。
•成绩分析:根据成绩数据生成可视化分析报告,帮助教师和学生分析成绩情况。
2.2 数据库设计为了方便管理学生信息和成绩数据,我们需要设计一个适合存储这些数据的数据库。
考虑到成绩比较简单,我们选择关系型数据库。
数据库中需要包含以下表:•学生表:包括学生ID、姓名、班级等字段。
•科目表:包括科目ID、科目名称等字段。
•成绩表:包括成绩ID、学生ID、科目ID、成绩等字段。
2.3 界面设计为了使用户能够方便地使用该系统,我们需要设计一个简洁明了的界面。
主界面应包括以下功能:•学生信息管理:提供学生信息的录入、修改、查询和删除功能。
•成绩录入和修改:提供成绩的录入和修改功能。
•成绩查询:提供根据学号或姓名查询学生成绩,并支持按科目和总分排序的功能。
•成绩统计:显示学生的平均分、最高分、最低分等统计数据。
•成绩分析:生成可视化分析报告,帮助教师和学生进行成绩分析。
3. 结果经过设计和实现,我们成功开发了一个C语言成绩管理系统。
该系统具备以下特点:•功能齐全:能够满足学生信息管理、成绩录入和修改、成绩查询、成绩统计和成绩分析等功能需求。
•数据准确性:通过数据库管理成绩数据,确保数据的准确性和一致性。
《C程序设计》)设计报告书学生成绩管理系统学生姓名学号班级成绩计算机科学与技术专业2015年 01 月 6 日摘要本系统主要用于学生成绩管理与查询,主要功能包括数据的录入、读取、显示、删除、插入、查找、修改、排名。
主要使用人群:龙岩学院信息工程院全体学生。
目录1 课题综述 (X)1.1课题内容 (X)1.2意义 (X)1.3设计目的 (X)2 系统分析 (X)2.1相关基础知识 (X)2.2 总体方案 (X)3 系统设计 (X)3.1 新建文件 (X)3.2 打开文件 (X)3.3 修改功能 (X)3.4 插入功能 (X)3.5 查询功能 (X)3.6 删除功能 (X)3.7 排名功能 (X)3.8 关于我们 (X)3.9 软件说明 (X)3.10退出保存 (X)4 代码编写 (X)4.1 总程序 (X)5 总结 (X)参考文献 (X)1 课题综述1.1课题内容每个学生的信息为:学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。
功能:(1) 按学号顺序输入学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C 语言、高数、大学语文、汇编、中近史),并存入文件中。
(2) 从文件读取数据(3) 删除学生信息(4) 查询学生信息(查询可分为精确查询和模糊查询)(5) 修改学生信息(要求修改后,数据依然是按学号顺序排列)(6) 插入学生信息(要求插入后,数据依然是按学号顺序排列)(7) 附加功能,学生可自由发挥,如:排名、求各门课程平均分等。
1.2意义通过该课程设计,为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。
把现实世界中的实际问题在计算机内并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。
同时将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,对C系统编程有一个大致的了解。
学生成绩管理系统C语言课程设计报告摘要:本报告旨在介绍学生成绩管理系统的设计和实现过程。
学生成绩管理系统是一个基于C语言开发的应用程序,旨在帮助学校或教育机构有效管理学生的成绩信息。
本报告将涵盖系统需求分析、设计思路、关键功能模块和实现细节等方面,并对系统的功能和性能进行评估。
1. 引言学生成绩管理系统的开发旨在解决传统成绩管理方式中存在的问题,提高管理效率和准确性。
通过利用计算机技术和数据库管理系统,该系统能够方便地记录、查询和分析学生的成绩信息。
2. 需求分析在需求分析阶段,我们与教育机构的教师和管理人员进行了沟通和讨论,明确了系统的功能需求。
主要功能包括学生信息管理、成绩录入、成绩查询和统计分析等。
3. 设计思路基于需求分析结果,我们采用了模块化设计的思路来构建学生成绩管理系统。
系统主要分为以下几个模块:学生信息管理模块、成绩录入模块、成绩查询模块和统计分析模块。
每个模块都具有清晰的功能和接口,便于系统的扩展和维护。
4. 系统实现我们使用C语言作为系统的开发语言,并采用了MySQL数据库管理系统来存储学生的成绩信息。
在系统实现过程中,我们利用C语言提供的文件操作和数据库连接库来实现各个功能模块的代码编写。
5. 关键功能模块5.1 学生信息管理模块:实现学生信息的录入、修改和删除等功能,保证学生信息的完整性和准确性。
5.2 成绩录入模块:教师可以通过该模块录入学生的成绩信息,并将其存储到数据库中。
5.3 成绩查询模块:学生和教师可以通过该模块查询学生的成绩信息,包括单个学生和全班学生的成绩查询。
5.4 统计分析模块:根据学生的成绩信息,实现成绩的统计分析功能,包括平均成绩、最高成绩、最低成绩等统计指标的计算。
6. 系统评估为了评估学生成绩管理系统的功能和性能,我们进行了一系列测试和调优。
测试结果表明系统能够准确地录入和查询学生的成绩信息,并具有良好的用户界面和响应速度。
7. 结论通过本次课程设计,我们成功地设计和实现了学生成绩管理系统。
内蒙古科技大学本科生课程设计说明书题目:C语言课程设计——学生成绩管理系统学生姓名:郭**学号:**********专业:计算机科学与技术班级:计科-2指导教师:***日期:2015年 12月25日内蒙古科技大学课程设计说明书内蒙古科技大学课程设计任务书I内蒙古科技大学课程设计说明书目录内蒙古科技大学课程设计任务书 (I)第一章需求分析 (3)1.1引言 (3)1.2任务概述 (3)1.3数据描述 (3)1.4功能需求 (3)1.5性能需求 (3)1.6运行需求 (4)1.7任务计划 (4)第二章概要设计 (4)2.1总体设计 (4)2.2数据类型设计(或数据结构设计) (5)2.3接口设计 //函数声明 (5)2.4运行界面设计 (6)第三章详细设计 (7)3.1输入模块设计 (7)3.2输出模块设计 (7)3.3 查找模块设计 (8)3.4排序模块设计 (8)3.5保存及读取模块设计 (9)第四章测试分析 (10)4.1测试程序执行情况 (10)第五章课程设计总结 (14)附录:程序代码 (15)参考文献 (32)致谢 (32)II内蒙古科技大学课程设计说明书第一章需求分析1.1引言因学校中学生信息庞大,复杂,为了方便教师们管理学生信息,特编写了一个学生成绩管理系统。
1.2任务概述1.目标本学生成绩管理系统主要是为学校里的老师提供一个管理学生信息的平台。
根据系统界面的提示信息对学生信息进行添加、浏览、修改、保存等操作。
2.运行环境Windows系统3.用户特点懂得一些基本的电脑操作即可。
4.条件限制计算机一台1.3数据描述系统的数据类型有:整型int,实型float,字符型char,结构体struct;自己定义的数据类型有:STU;1.4功能需求❖从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里❖打开文件后,计算每个人的总分和平均分,排序并保存❖具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)❖具有插入、删除和修改功能具有输出文件数据信息的功能1.5性能需求无3内蒙古科技大学课程设计说明书1.6运行需求1.硬件环境普通的计算机2.软件环境支持的操作系统包括windows98/xp及及以上版本1.7任务计划本系统共分为一个主页面模块(主函数部分),五个功能模块(功能函数)分别为增加学生成绩信息、查看学生成绩信息、修改学生成绩信息、对学生信息进行排序、退出。
C语言课程设计报告院系:机械与电子信息学院姓名:王鹏飞班号:07310126学号:20101003558指导教师:龚文引日期:2011年7月学生成绩管理系统一、题目要求设计一个学生成绩管理程序,对在校某班学生几门课程的考试成绩进行统一管理。
每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放。
(1)一个文件按以班为单位存储学生记录.(2)将允许的操作分为四种,以A、B、C、D、E、F为标志(若设置菜单操作更佳):A:插入一个新的学生记录(录入学生信息);B:修改学生记录;C:删除一个学生记录;D:登记成绩;E:修改成绩;F:浏览全班成绩。
(3)计算学生的总成绩。
(4)按学号排序输出全班成绩表。
二、需求分析根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览学生的信息,应提供添加、修改、删除、排序等操作;另外还应提供键盘式选择菜单实现功能选择。
三、总体设计根据上面的需求分析,可以将这个系统的设计分为8个模块,数据输入,添加数据,修改数据,删除数据,修改成绩,学号排序,浏览成绩,退出模块。
四。
详细设计1、主函数【分析】将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.【流程图】:【程序代码】:menu() /*主界面*/{int w1;char n; /*。
变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/do{puts(”\t\t***************菜单****************\n\n”);puts(”\t\t\t\tA。
录入学生信息”);puts(”\t\t\t\tB.修改学生记录”);puts(”\t\t\t\tC。
删除一个学生记录”);puts(”\t\t\t\tD.登记成绩”);puts("\t\t\t\tE。
修改成绩");puts("\t\t\t\tF。
C 语言程序设计报告课题:学生成绩管理时间:一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。
具体要求如下:1.主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单系统功能需求分析:1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点;2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化。
二、概要设计系统总体设计框架:对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据。
系统功能模块图:三、详细设计主要功能模块的算法设计思路如下:1、输入信息函数(1)定义指向结构体变量的指针; (2)移动指针,找到插入结点; (3)在要插入的结点输入信息; (4)返回头指针。
2、修改信息(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入; (3)根据要修改的编号查找对应结点; (4)修改信息;(5)修改成功。
3、排序函数(1)定义所要排序的班级和链表的头指针为形参;(2)调用排序函数,把班级和链表的头指针赋给形参;(3)在子函数中进行排序;(4)输出排序结果。
4、显示学生成绩信息(void Disp(Link l))(1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);(2)用指针检验是否有记录;(3)若无记录,输出提示信息,返回主函数;若有记录,移动指针,依次输出记录;5、查询班级成绩信息(void Find(Link l))(1)选择所要查询的班级;(2)输入班级:(3)在链表中寻找相应结点;(4)输出结点信息。
以上各个函数的流程图如下:子函数排序:求和:求平均数:四、主要源程序代码#include <stdio.h>#include <malloc.h>#include <string.h>#define NULL 0#define LEN sizeof (struct student)#define PRINT printf("======================main menu=======================\n")#define PRIN printf("Please chose the number:\n")#define PRI printf("Sorry,the number you chose is error,please chose again\n")struct student \*定义一个结构体*\{int term; \*学期*\int class; \*班级*\char name[20]; \*姓名*\int score_1; \*科目一*\int score_2; \*科目二*\int score_3; \*科目三*\float ave; \*平均分*\int sum; \*总分*\struct student *next;};int n;struct student *creat(void) \*创建信息链表*\{struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);printf("Please input the student information:\n");printf("Term Class Name Score_1 Score_2 Score_3\n");scanf("%d%d%s%d%d%d",&p1->term,&p1->class,p1->name,&p1->score_1,&p1->score_2,&p1-> score_3);head=NULL;while(p1->term!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *) malloc(LEN);scanf("%d%d%s%d%d%d",&p1->term,&p1->class,p1->name,&p1->score_1,&p1->score_2,&p1-> score_3);}p2->next=NULL;return(head);}void sort(struct student *p,int f) \*排序(形参为链表的头指针和想要排序的班级)*\ {int a,b,c,e;float d;char z[20];struct student *r,*s;while(f!=p->class) \*判断是否是想要排序的班级*\p=p->next;for(r=p;f==p->class&&r;r=r->next)for(s=p;s->next&&f==s->next->class;s=s->next)if(s->ave<(s->next)->ave){ \*交换结构体各个成员*\d=s->ave; s->ave=s->next->ave; s->next->ave=d;a=s->score_1; s->score_1=s->next->score_1; s->next->score_1=a;b=s->score_2; s->score_2=s->next->score_2; s->next->score_2=b;c=s->score_3; s->score_3=s->next->score_3; s->next->score_3=c;e=s->sum; s->sum=s->next->sum; s->next->sum=e;strcpy(z,s->name); strcpy(s->name,s->next->name); strcpy(s->next->name,z);}}int add(int i,struct student *p) \*求和(形参为想要求和的班级和链表的头指针)*\ {int sum;if(i==p->class)sum=p->score_1+p->score_2+p->score_3;return(sum);}float average(int i,struct student *p) \*求平均分(形参为想要求和的班级和链表的头指针)*\ {float ave;int sum;sum=add(i,p); \*调用add函数求和*\ave=sum/3.0;return(ave);}void main() \*主函数*\{int i,m;struct student *p,*q;printf("================Now begin to set up===================\n");p=creat(); \*调用creat函数,并创建一个信息链表*\q=p;do{PRINT;printf(" 1:correct the student information\n"); \*修改学生信息*\printf(" 2:calculate the students' score and then sort\n"); \*统计学生成绩并排序*\ printf(" 3:search the students' information\n"); \*查找学生信息*\ printf(" 4:output the score of student\n"); \*输出学生成绩*\ PRIN;doscanf("%d",&i);if(i!=1&&i!=2&&i!=3&&i!=4) PRI; \*报错功能*\}while(i!=1&&i!=2&&i!=3&&i!=4);if(i==1){char x[20];printf("Please input the name of student you want to correct:");do{scanf("%s",x); \*输入你要修改学生成绩的姓名*\ for(p=q;p!=NULL;p=p->next){if(strcmp(x, p->name)==0) \*查找学生*\{printf("Now,please input the new score of the student:\n"); \*输入新的成绩*\printf("Score_1 Score_2 Score_3\n");scanf("%d%d%d",&p->score_1,&p->score_2,&p->score_3);printf("Information correct succeed\n");printf("Now,%s's score is %-6d%-6d%-6d\n",x,p->score_1,p->score_2,p->score_3);break;}}if(p==NULL)printf("Can't find the student,please input again:"); \* 报错功能*\}while(p==NULL);p=q;}if(i==2){int j;printf("Please input which class you want to count:");scanf("%d",&j); \*输入你想要统计的班级*\printf("The score information of %d class is:\n",j);printf("Name Score_1 Score_2 Score_3 Average Sum\n");for(p=q;p!=NULL;p=p->next){p->sum=add(j,p); \* 调用函数add并赋值给结构体*\p->ave=average(j,p); \*调用函数average并赋值给结构体*\}printf("Before sorted,the student score is:\n");for(p=q;p!=NULL;p=p->next)if(j==p->class)printf("%-9s%-9d%-9d%-9d%-9.2f%-9d\n",p->name,p->score_1,p->score_2,p->score_3,p->ave,p->sum); \*输出排序前的学生成绩*\ p=q;sort(p,j); \*调用函数sort*\printf("After sorted,the student score is:\n");for(p=q;p!=NULL;p=p->next)if(j==p->class)printf("%-9s%-9d%-9d%-9d%-9.2f%-9d\n",p->name,p->score_1,p->score_2,p->score_3,p->ave,p->sum); \*输出排序后的成绩*\ p=q;}if(i==3){int a;char y[20];PRINT;printf(" 1:search the score of student\n"); \*查询学生的各科分数*\printf(" 2:search the score of fail lesson\n"); \*查询不及格科目*\printf(" 3:search the name of student\n"); \*查询每个班级的成员*\printf("What's do you want to do?"); PRIN;scanf("%d",&a); \*输入你想要执行的操作的序号*\ if(a==1){printf("Please input the student name:");do{scanf("%s",y); \*输入你想要查询的学生的姓名*\for(p=q;p!=NULL;p=p->next){if(strcmp(y,p->name)==0) \*查找学生*\{printf("%s's score is %d %d %d\n",p->name,p->score_1,p->score_2,p->score_3);break; \*输出学生的成绩*\}}if(p==NULL)printf("Can't find the student,please input again:"); \*报错功能*\}while(p==NULL);p=q;}else if(a==2){for(p=q;p!=NULL;p=p->next){if(p->score_1<60)printf("%s's lesson 1 is failed and the score is %d\n",p->name,p->score_1);if(p->score_2<60)printf("%s's lesson 2 is failed and the score is %d\n",p->name,p->score_2);if(p->score_3<60)printf("%s's lesson 3 is failed and the score is %d\n",p->name,p->score_3);}p=q;}else if(a==3){int c;printf("Please input the number of class:\n");scanf("%d",&c); \*输入你想要输出成绩的班级*\ printf("The %d class have these student:\n",c);for(p=q;p!=NULL;p=p->next)if(c==p->class)printf("%-10s",p->name);printf("\n");p=q;}}if(i==4){int b;printf("Please input which class:\n"); \*输入你想要输出成绩的班级*\ scanf("%d",&b);printf("Now,the score of the student of %d class is:\n",b);printf("Name Score_1 Score_2 Score_3\n");for(p=q;p!=NULL;p=p->next)if(b==p->class)printf("%-12s%-12d%-12d%-12d\n",p->name,p->score_1,p->score_2,p->score_3);} 输出成绩PRINT;printf("Do you want to going on?\n"); \*是否想要继续操作*\ printf(" 1:YES 2:NO \n");scanf("%d",&m);}while(m!=2);}五、调试分析过程描述运行情况如下:输入学生的基本信息:修改指定学生的成绩:统计并排序一班成绩:统计并排序二班的成绩:查询指定学生的成绩:查询学生不及格的成绩:查询班级成员:输出一班的成绩:输出二班的成绩:调试过程中的主要问题及解决方法:1、执行排序函数时出错,指针指向不确定。