C语言课程设计报告-学籍信息管理系统.doc_第1页
C语言课程设计报告-学籍信息管理系统.doc_第2页
C语言课程设计报告-学籍信息管理系统.doc_第3页
C语言课程设计报告-学籍信息管理系统.doc_第4页
C语言课程设计报告-学籍信息管理系统.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除中 国 地 质 大 学本科生课程论文封面课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录课程设计评语2目 录31课程论文题目42程序设计思路53. 功能模块图54数据结构设计75算法设计86.程序代码187程序运行结果268编程中遇到的困难及解决方法309总结心得及良好建议3110、致谢.311 课程论文题目【要求】:使用下面的数据,设计一个简单的学籍信息管理系统。学生基本信息文件(A.TXT)及其内容:(A.TXT文件不需要编程录入数据,可用文本文档编辑工具直接生成)学号 姓 名 性别 宿舍号码 电话号码01 张成成 男 501 8773211102 李成华 女 101 8772311203 王成凤 女 101 8772311204 张明明 男 502 8773433305 陈 东 男 501 8773211106 李 果 男 502 8773433307 张园园 女 102 87756122学生成绩基本信息文件(B.TXT)及其内容:学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 学分01 A01 大学物理 3 66 78 8202 B03 高等数学 4 78 -1 9001 B03 高等数学 4 45 -1 8802 C01 VF 3 65 76 66功能要求及说明:(1)数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。综合成绩、学分由程序根据条件自动运算。综合成绩的计算如下所述。 如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%。实得学分的计算: 采用等级学分制。综合成绩在90-100之间 ,应得学分=学分*100%。综合成绩在80- 90之间 ,应得学分=学分*80%。综合成绩在70- 80之间 ,应得学分=学分*75%。综合成绩在60- 70之间 ,应得学分=学分*60%。综合成绩在60以下 ,应得学分=学分*0%。(2)查询功能:分为学生基本情况查询和成绩查询两种。 学生基本情况查询:输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。成绩查询:输入一个学号时,查询出此学生的所有课程情况,格式如下:学 号:x x 姓 名:x x x课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx共修:xx科,实得总学分为: xxx (3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。2程序设计思路这个C语言课程设计题目是关于学生学籍信息管理系统的设计。根据设计题目的要求,数据结构采用结构体数组,是用来提供学生基本信息和学生成绩基本信息结构体数组。题目要求能够完成录入数据,查询,删除和排序的功能,所以程序依次以主函数板块、数据录入功能板块、查询功能板块、删除功能板块、排序功能板块的顺序进行,另外,程序中还用到输入和输出等基本函数。运用函数实现要求的各项功能,将各个分函数依照一定的次序列出,这样一方面可以使程序易于编写和阅读,另一方面还可以很方便地在编程过程中,另行调试各个分函数,便于检查在程序设计过程中出现的错误,并可以及时修改。3. 功能模块图根据以上的需求分析,可以将这个系统分为以下主要功能板块:主函数板块、数据录入功能板块、查询功能板块、删除功能板块、排序功能板块。需要特别说明的两部分有:系统中的结构体定义和函数声明部分再次没有得到明显的体现,但是在整个程序中所起的基础性作用是不可替代的,所有的分程序都是在此基础上进行的。读取数据和输出数据函数在各个分程序中都起着重要作用,属于公共函数的范畴。除以上两部分中所述的定义声明和部分函数外,本设计题目所要求的其他所有功能均能在以下系统功能板块中得以体现,具体如下所示:学籍信息管理系统显示主菜单【DisplayMainMenu()】数据录入【DataInput()】排序功能DataSort()查询功能DataQuery()删除功能DataDelete()退出功能 exit()按 学 号 QueryMark(int )按实得学分排序 sort2()按综合成绩排序 sort1()按 学 号 QueryById(int )按宿舍号码QueryByRoom(int )成绩查询学生基本情况查询4数据结构设计本程序中主要运用了两大结构体数组,一个是学生基本信息的结构体数组(StudentInfo si30),另一个是学生成绩基本基本信息的结构体数组(MarkInfo mi150)。在程序运行过程中,很多子函数都调用了这两个结构体数组中的信息,或是对其进行阅读输出,或是对其进行其他简单操作。整个程序自始自终始终紧紧围绕这两大结构体数组进行。具体定义如下:利用了组合体的方式定义结构体数组,提供学生基本信息,定义如下:typedef struct int Id; /学号char name10;/姓名char sex6; /性别 int room; /宿舍号int tel; /电话号码 StudentInfo; /定义学生信息的结构体类型同时定义了另一结构体数组,提供学生成绩基本信息,定义如下:typedef struct int Id;char courseNo10; /课程编号char courseName20;/课程名float a; / 课程学分float b; / 平时成绩float c; / 实验成绩float d; / 卷面成绩float e; / 综合成绩float f; / 实际学分 MarkInfo; /定义课程信息的结构体类型使用以上结构体数组,使程序变得思路清晰,设计过程也变得相对简单。同时,定义并使用了如下函数,声明和定义void ReadFile();void DisplayMainMenu();void DataInput();void DataQuery();void DataDelete();void DataSort();void QueryById(int );void QueryByRoom(int );void QueryMark(int );void sort1();void sort2();void markput();StudentInfo si30; / 学生信息结构数组MarkInfo mi150; / 学生成绩结构数组int sp=0; / 学生信息结构数组中学生数int mp=0; / 学生成绩结构数组中成绩数5算法设计1.、定义结构体,并且进行函数声明在这一部分,定义了关于学生基本信息和学生成绩信息的两个结构体数组,用于存储数据,另外对本程序中所用到的函数进行了详细地声明,通过定义数组和对函数的声明为本程序奠定了重要的基础。#include typedef struct int Id; /学号char name10;/姓名char sex6; /性别 int room; /宿舍号int tel; /电话号码 StudentInfo; /定义学生信息的结构体类型typedef struct int Id;char courseNo10; /课程编号char courseName20;/课程名float a; / 课程学分float b; / 平时成绩float c; / 实验成绩float d; / 卷面成绩float e; / 综合成绩float f; / 实际学分 MarkInfo; /定义课程信息的结构体类型 / 定义结构数组为全局变量StudentInfo si30; / 学生信息结构数组MarkInfo mi150; / 学生成绩结构数组int sp=0; / 学生信息结构数组中学生数int mp=0; / 学生成绩结构数组中成绩数void ReadFile();void DisplayMainMenu();void DataInput();void DataQuery();void DataDelete();void DataSort();void QueryById(int );void QueryByRoom(int );void QueryMark(int );void sort1();void sort2();void markput();2.主函数:主函数设计的很简洁,只提供输入,功能处理和输出部分的函数的调用,其中各功能模块用菜单方式选择,为我们提供了五个功能选项,让我们可以很方便地通过这五个功能选项来调用各个功能模块函数。显示一系列功能选项(即主菜单)输入n,判断是否1-5根据n的值调用各功能模块函数定义整型变量X作为功能菜单选项的选择方式。Void main()int x;ReadFile(); while (1)DisplayMainMenu();scanf (“%d”,&x);switch (x)case 1 : DataInput(); break; case 2 : DataQuery(); break; case 3 : DataDelete(); break; case 4 : DataSort(); break; case 5 : exit();3.各功能模块的设计:模块功能图如下所示:所 用 到 的 各 个 子 函 数读取数据、计算菜 单 显 示数 据 录 入排 序查 询按 实 际 学 分按 综 合 成 绩查 询 成 绩查询 学生 信息* 读 取 数 据 、 计 算 *在这段功能模块中,利用指针变量来读取结构体数组文件中的相应信息,是程序的编写、阅读和运行变得简洁明了。此外,在这段程序中,还对文件中的数据按照题目的具体要求对综合成绩和学分做了自动计算。Void ReadFile( ) FILE *fp;if(fp = fopen(“A.txt”,”r”)=NULL)printf(“cant open the filen”);while (!feof(fp)fscanf(fp,”%d%s%s%d%d”, &sisp.Id,,&sisp.sex,&sisp.room,&sisp.tel);sp+;fclose (fp);fp = fopen(“B.txt”,”r”);while (!feof(fp)fscanf (fp,”%d%s%s%f%f%f%f”,&mimp.Id,mimp.courseNo,mimp.courseName,&mimp.a,&mimp.b,&mimp.c, &mimp.d);if (mimp.c = -1) mimp.e = 0.3*mimp.b+0.7*mimp.d;else mimp.e = 0.15*mimp.b+0.15*mimp.c+0.7*mimp.d;if ( mimp.e = 90. ) mimp.f = mimp.a;else if ( mi mp.e = 80. ) mimp.f = mimp.a *0.8;else if ( mimp.e = 70. )mimp.f = mimp.a *0.75;else if ( mimp.e = 60. ) mimp.f = mimp.a *0.6;else mimp.f = 0;mp+;fclose(fp);* 显 示 主 菜 单 *这部分是对本程序的主要功能做出的展示,体现了本程序的五大功能,简洁明白,一目了然。Void DisplayMainMenu()printf (“n 1) 数据录入 n 2) 数据查询 n 3) 数据删除 n 4) 数据排序 n 5) 程序结束 n “);* 数 据 录 入 *录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据,即对关于学生成绩基本信息的结构体数组进行输入,也就是文件B.TXT中的内容。Void DataInput()FILE *fp;int I;printf (“学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩n”);while(1)scanf (“%d%s%s%f%f%f%f”,&mimp.Id,mimp.courseNo,mimp.courseName,&mimp.a,&mimp.b,&mimp.c, &mimp.d);if(mimp.Id=-1)break;if (mimp.c = -1) mimp.e = 0.3*mimp.b+0.7*mimp.d;else mimp.e = 0.15*mimp.b+0.15*mimp.c+0.7*mimp.d;if ( mimp.e = 90. ) mimp.f = mimp.a;else if ( mi mp.e = 80. ) mimp.f = mimp.a *0.8;else if ( mimp.e = 70. )mimp.f = mimp.a *0.75;else if ( mimp.e = 60. ) mimp.f = mimp.a *0.6;else mimp.f = 0;mp+;fp = fopen(“B.txt”,”r+”);for(i=0;imp;i+)fprintf(fp,”%d%s%s%f%f%f%f”,&mii.Id,mii.courseNo,mii.courseName,&mii.a,&mimp.b,&mii.c, &mii.d);fclose(fp);*查 询 *此段程序是为实现信息查询功能而设计的。总体来讲,分为两大功能模块,一是学生基本信息查询,二是对学生成绩的查询。在第一种查询,即对学生基本信息的查询中,又提供了两种查询方式,一种是按学号对学生基本信息进行查询,一种是按宿舍号码对学生基本信息进行查询。Void DataQuery()int x,y,z;printf( “n 1) 学生基本情况查询n 2) 成绩查询n”);-选择查询内容scanf(“%d”,&x);if (x = 1) / 查询学生信息printf (“1) 按学号查询 2) 按宿舍查询n”);-选择查询方式scanf(“%d”,&y);if (y = 1 ) printf ( “ 输入学号n”);-按学生学号查询scanf (“%d”,&z);QueryById(z);if (y = 2) printf ( “ 输入宿舍号n”);-按学生宿舍号码进行查询scanf (“%d”,&z);QueryByRoom(z);if ( x =2) / 查询成绩信息-查询学生成绩(输入学号)printf ( “ 输入学号n”); scanf (“%d”,&y);QueryMark(y);* 删 除 *此模块提供了按学号实现删除学生信息的功能,当在文件A.TXT中删除一个学生时,自动地在文件B.TXT中删除此人所有信息。Void DataDelete()FILE *fp;int x;int i=0;int k,d;printf( “输入学号n”);scanf( “%d”,&x);while( sii.Id != x) i+;if (isp-1) for ( k=I; ksp-1; k+)sik = sik+1; if ( isp) sp-;d = 0; for (k=0;kmp;k+)if ( mik.Id = x ) d+;else mik-d = mik;mp = mp d;fp = fopen(“D:B.txt”,”r+”);for(i=0;imp;i+)fprintf(fp,”%d%s%s%f%f%f%f”,&mii.Id,mii.courseNo,mii.courseName,&mii.a,&mii.b,&mii.c, &mii.d);* 按 学 号 查 询 *按学生学号对学生基本信息进行查询。Void QueryById(int x)int I;for (i=0;isp;i+)if ( sii.Id = x ) printf (“n 学号 姓名 性别 宿舍号码 电话号码n”);printf (“ %d %s %s %d %dn”,sii.Id,,sii.sex,sii.room,sii.tel);* 按 宿 舍 号 查 询 *按宿舍号码对学生基本信息进行查询。void QueryByRoom(int x) int i;for (i=0;isp;i+)if ( sii.room = x ) printf (n 学号 姓名 性别 宿舍号码 电话号码n);printf ( %d %s %s %d %dn,sii.Id,,sii.sex,sii.room,sii.tel);* 成 绩 查 询 * 对成绩进行查询要求输入学生的学号就可以查询出学生所有的课程成绩情况,并且能够按一定的格式输出。void QueryMark(int x) int i=0; while(sii.Id!=x) i+; printf(学号: %d 姓名: %sn,sii.Id,);for (i=0;i=1;i-)for (j=0;jmij+1.e) t=mij;mij = mij+1;mij+1 = t;markput();* 按 实 得 学 分 排 序 *按void sort2()函数计算所得的实得学分进行排序。void sort2() int i,j;MarkInfo t;for (i=mp-1;i=1;i-)for (j=0;jmij+1.f) t=mij;mij = mij+1;mij+1 = t;markput();* 数 据 输 出 *利用函数void markput()按设计题目规定的格式输出一定格式的信息void markput()int i;for( i=0;imp;i+)printf(n 学号 %d 课程编号 %s 课程名称 %s 学分 %f 平时成绩 %f 实验成绩 %f 卷面成绩 %f 综合成绩 %f 实得学分 %fn,mii.Id,mii.courseNo,mii.courseName,mii.a,mii.b,mii.c,mii.d,mii.e,mii.f);6.程序代码#include typedef struct int Id; /学号char name10; /姓名char sex6; /性别 int room; /宿舍号int tel; /电话号码 StudentInfo; /定义学生信息的结构体类型typedef struct int Id;char courseNo10; /课程编号char courseName20;/课程名float a; / 课程学分float b; / 平时成绩float c; / 实验成绩float d; / 卷面成绩float e; / 综合成绩float f; / 实际学分 MarkInfo; /定义课程信息的结构体类型 / 定义结构数组为全局变量StudentInfo si30; / 学生信息结构数组MarkInfo mi150; / 学生成绩结构数组int sp=0; / 学生信息结构数组中学生数int mp=0; / 学生成绩结构数组中成绩数void ReadFile();void DisplayMainMenu();void DataInput();void DataQuery();void DataDelete();void DataSort();void QueryById(int );void QueryByRoom(int );void QueryMark(int );void sort1();void sort2();void markput();/ 主程序的结构void main()int x;ReadFile(); while (1)DisplayMainMenu();scanf (%d,&x);switch (x)case 1 : DataInput(); break; case 2 : DataQuery(); break; case 3 : DataDelete(); break; case 4 : DataSort(); break; case 5 : exit();void ReadFile( ) FILE *fp;if(fp = fopen(A.txt,r)=NULL)printf(cant open the filen);while (!feof(fp)fscanf(fp,%d%s%s%d%d, &sisp.Id,,&sisp.sex,&sisp.room,&sisp.tel);sp+;fclose (fp);fp = fopen(B.txt,r);while (!feof(fp)fscanf (fp,%d%s%s%f%f%f%f,&mimp.Id,mimp.courseNo,mimp.courseName,&mimp.a,&mimp.b,&mimp.c, &mimp.d);if (mimp.c = -1) mimp.e = 0.3*mimp.b+0.7*mimp.d;else mimp.e = 0.15*mimp.b+0.15*mimp.c+0.7*mimp.d;if ( mimp.e = 90. ) mimp.f = mimp.a;else if ( mi mp.e = 80. ) mimp.f = mimp.a *0.8;else if ( mimp.e = 70. )mimp.f = mimp.a *0.75;else if ( mimp.e = 60. ) mimp.f = mimp.a *0.6;else mimp.f = 0;mp+;fclose(fp);void DisplayMainMenu()printf (n 1) 数据录入 n 2) 数据查询 n 3) 数据删除 n 4) 数据排序 n 5) 程序结束 n );void DataInput()FILE *fp;int i;printf (学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩n);while(1)scanf (%d%s%s%f%f%f%f,&mimp.Id,mimp.courseNo,mimp.courseName,&mimp.a,&mimp.b,&mimp.c, &mimp.d);if(mimp.Id=-1)break;if (mimp.c = -1) mimp.e = 0.3*mimp.b+0.7*mimp.d;else mimp.e = 0.15*mimp.b+0.15*mimp.c+0.7*mimp.d;if ( mimp.e = 90. ) mimp.f = mimp.a;else if ( mi mp.e = 80. ) mimp.f = mimp.a *0.8;else if ( mimp.e = 70. )mimp.f = mimp.a *0.75;else if ( mimp.e = 60. ) mimp.f = mimp.a *0.6;else mimp.f = 0;mp+;fp = fopen(B.txt,r+);for(i=0;imp;i+)fprintf(fp,%d%s%s%f%f%f%f,&mii.Id,mii.courseNo,mii.courseName,&mii.a,&mimp.b,&mii.c, &mii.d);fclose(fp);void DataQuery()int x,y,z;printf( n 1) 学生基本情况查询n 2) 成绩查询n);scanf(%d,&x);if (x = 1) / 查询学生信息printf (1) 按学号查询 2) 按宿舍查询n);scanf(%d,&y);if (y = 1 ) printf ( 输入学号n); scanf (%d,&z);QueryById(z);if (y = 2) printf ( 输入宿舍号n); scanf (%d,&z);QueryByRoom(z);if ( x =2) / 查询成绩信息printf ( 输入学号n); scanf (%d,&y);QueryMark(y);void DataDelete()FILE *fp;int x;int i=0;int k,d;printf( 输入学号n);scanf( %d,&x);while( sii.Id != x) i+;if (isp-1) for ( k=i; ksp-1; k+)sik = sik+1; if ( isp) sp-;d = 0; for (k=0;kmp;k+)if ( mik.Id = x ) d+;else mik-d = mik;mp = mp - d;fp = fopen(D:B.txt,r+);for(i=0;imp;i+)fprintf(fp,%d%s%s%f%f%f%f,&mii.Id,mii.courseNo,mii.courseName,&mii.a,&mii.b,&mii.c, &mii.d);void QueryById(int x)int i;for (i=0;isp;i+)if ( sii.Id = x ) printf (n 学号 姓名 性别 宿舍号码 电话号码n);printf ( %d %s %s %d %dn,sii.Id,,sii.sex,sii.room,sii.tel);void QueryByRoom(int x) int i;for (i=0;isp;i+)if ( sii.room = x ) printf (n 学号 姓名 性别 宿舍号码 电话号码n);printf ( %d %s %s %d %dn,sii.Id,,sii.sex,sii.room,sii.tel);void QueryMark(int x) int i=0; while(sii.Id!=x) i+; printf(学号: %d 姓名: %sn,sii.Id,);for (i=0;i=1;i-)for (j=0;jmij+1.e) t=mij;mij = mij+1;mij+1 = t;markput();void sort2() int i,j;MarkInfo t;for (i=mp-1;i=1;i-)for (j=0;jmij+1.f) t=mij;mij = mij+1;mij+1 = t;markput();void markput()int i;for( i=0;imp;i+)printf(n 学号 %d 课程编号 %s 课程名称 %s 学分 %f 平时成绩 %f 实验成绩 %f 卷面成绩 %f 综合成绩 %f 实得学分 %fn,mii.Id,mii.courseNo,mii.courseName,mii.a,mii.b,mii.c,mii.d,mii.e,mii.f);7程序运行结果显示主菜单:(1)数据录入功能:对成绩进行录入(2)查询功能:学生基本情况查询a、按学号查询b、按宿舍查询学生成绩查询(输入学生学号)(3)排序功能按综合成绩排序按实得学分排序(4)删除功能(按学生学号删除)(5)退出功能(按任意键即可退出)8编程中遇到的困难及解决方法首先就在本程序的编写过程中出现的问题进行说明:首先,对于数据的删除存在一定的问题,这个问题是在老师的指导下又经过同学们的帮助才解决的,其间,我明白了结构体数组中数据删除的基本原理和删除的方法;其次,在程序编写过程中,我忽视了几个需要注意的基本语法,比如,有的变量忘记了定义和标识符的使用等问题,这个是在同学的帮助下才

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论