版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程设计学籍信息管理系统学号:20071000611班级:055071姓名:周泓吉指导老师:刘文中学籍信息管理系统一,题目要求使用下面的数据设计一个简单的学籍管理系统。 学生基本信息文件(A.TXT)极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756112 学生成绩基本信息文件(B.TXT)极其内
2、容: . 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66 . 功能要求极其说明: (1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 综合成绩的计算: a.如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70% b.如果实验成绩不为-1,表示本课程有实验成绩,
3、综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70% 实得学分的计算:采用等级学分制。 综合成绩在90100之间,应得学分=学分*100% 综合成绩在8090之间,应得学分=学分*80% 综合成绩在7080之间,应得学分=学分*75% 综合成绩在6070之间,应得学分=学分*60% 综合成绩在60分以下,应得学分=学分*0% (2)查询功能:分为学生基本情况查询和成绩查询两种 学生基本情况查询: 输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。 输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。 称号查询: 输入一个学号时,查出此学生所有课程情况,格式如下:
4、学号:XX 课程名称:XXXX综合成绩:XX实得学分:XXX . 共修:X科,实得总分为:XXX (3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此学生所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 提示 数据结构才用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。二,需求分析根据题目要求,学籍信息管理系统需要输入和输出等操作,在程序中,需要数据录入,查询,删除,删除和排序功能。三,解题的思路1、 定义结构typedef struct int Id;char10 name;int sex; / or bool sexint
5、 room;int tel; StudentInfo;typedef struct int Id;char10 courseNo;char20 couseName;int a; / 课程学分int b; / 平时成绩int c; / 实验成绩int d; / 卷面成绩float e; / 综合成绩float f; / 实际学分 GradeInfo2、 定义结构数组为全局变量StudentInfo si100; / 学生信息结构数组GradeInfo gi500; / 学生成绩结构数组int sp=0; / 学生信息结构数组中学生数int gp=0; / 学生成绩结构数组中成绩数3、 主程序的结
6、构void main()int x;1、 ReadFile(); / 从文件中读取数据对两个结构数组赋值, 采用子函数的形式可以使主程序结构清楚2、 While (1) DisplayMainMenu(); / 因为要多次调用工作菜单,要采用子函数的形式scanf (“%d”,&x);switch xCase 1 :DataInput(); break; /Case 2 :DataQuery(); break; /Case 3 :DataDelete(); break; /Case 4 :DaraSort(); break; / Case 5 :exit(0);数据录 入数据查 询数据
7、删 除数据排 序程序结束学籍管理系统开始程序结束结束void ReadFile( ) File *fp;fp = fopen(“A.txt”,”r”);while (!feof(fp)fscanf(fp,“%d%s%d%d%d”, &sisp.Id,,&sisp.sex,&sisp.room,&sisp.tel);p+;fclose (fp);fp = fopen(“B.txt”,”r”);while (!feof(fp)fscanf (fp,”%d,%s%s%d%d%d%d”,&gigp.Id,gigp.courseNo,gigp.c
8、ourseName,&gigp.a,&gigp.b,&gigp.c, &gigp.d);if (gigp.c = -1) gigp.e = 0.3*gigp.b+0.7*gigp.d;else gigp.e = 0.15*gigp.b+0.15*gigp.c+0.7*gigp.d;if ( gigp.e > = 90. ) gigp.f = gigp.a *1.;else if ( gi gp.e >= 80. ) gigp.f = gigp.a *0.8;else if ( gigp.e >= 70. )gigp.f = gigp.a *0.
9、75;else if ( gigp.e >= 60. ) gigp.f = gigp.a *0.6;else gigp.f = 0;gp+;fclose(fp);void DisplayMainMenu()printf (“ 1) 数据录入 n2) 数据查询 n3) 数据删除 n4) 数据排序 n5) 程序结束 n “);显示一系列功能选项根据x的值调用各功能模块函数结束开始void DataInput()printf (“学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩n”);fscanf (fp,”%d,%s%s%d%d%d%d”,&gigp.Id,gigp
10、.courseNo,gigp.courseName,&gigp.a,&gigp.b,&gigp.c, &gigp.d);if (gigp.c = -1) gigp.e = 0.3*gigp.b+0.7*gigp.d;else gigp.e = 0.15*gigp.b+0.15*gigp.c+0.7*gigp.d;if ( gigp.e > = 90. ) gigp.f = gigp.a *1.;else if ( gi gp.e >= 80. ) gigp.f = gigp.a *0.8;else if ( gigp.e >= 70. )gig
11、p.f = gigp.a *0.75;else if ( gigp.e >= 60. ) gigp.f = gigp.a *0.6;else gigp.f = 0;gp+;开始输入学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩结束数据输入void DataQuery()int x,y;printf( “ 1) 学生基本情况查询n 2) 成绩查询n”);if (x = 1) / 查询学生信息printf (“1) 按学号查询 2)按宿舍查询n”);if (y = 1 ) printf ( “ 输入学号n”); scanf (“%d”,&y);QueryById(y);
12、if (y = 2) printf ( “ 输入宿舍号n”); scanf (“%d”,&y);QueryByRoom(y);if ( x =2) / 查询成绩信息printf ( “ 输入学号n”); scanf (“%d”,&y);QueryGrade(y);开始数据查询x=1?Y=1?输入学号输入宿舍号输入学号NNYY结束void DataDelete()int x;int i=0;printf( “输入学号n”);scanf( “%d”,&x);while( sii.Id != x) i+;if (i<sp-1)for ( k=i; k<sp-1;
13、k+)sik = sik+1; / 删除一个数据后,其他数据前移if ( i<sp) sp-;d = 0; / 成绩数组中,有多个相同的学号,都要删除,并且后面的数据需要前移for (k=0;k<qp;k+)if ( gigp.Id = x ) d +;else gik-d = gik;gp = gp d;开始数据删除结束输入学号oid QueryById(int x)int i;for (i=0;i<sp;i+)if ( sii.Id = x ) printf ("n学号姓名性别宿舍号码电话号码n");printf ("%d%s%s%d%dn&
14、quot;,sii.Id,,sii.sex,sii.room,sii.tel);void QueryByRoom(int x)int i;for (i=0;i<sp;i+)if ( sii.room = x ) printf ("n学号姓名性别宿舍号码电话号码n");printf ("%d%s%s%d%dn",sii.Id,,sii.sex,sii.room,sii.tel);void QueryGrade(int x)int i;int sc=0;float sg=0;for (i=0;i<gp;i+)if
15、( gii.Id = x ) sc+;sg += gii.f;printf("n学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分n");printf("%d%s%s%f%f%f%f%f%f%fn",gii.Id,gii.courseNo,gii.courseName,gii.a,gii.b,gii.c,gii.d,gii.e,gii.f);printf ("共修:%d科,实得总分为:%fn",sc,sg);void DataSort()int x;printf ("1)综合成绩排序n2)实际学分排序n&quo
16、t;);scanf("%d",&x);if ( x = 1 ) sort1();if ( x = 2 ) sort2();void sort1()int i,j;GradeInfo t;for (i=gp-1;i>=1;i-)for (j=0;j<i;j+)if (gij.e>gij+1.e) / 如果改为 gij.e< gij+1.e 则为逆序 t=gij;gij = gij+1;gij+1 = t;gradeput();void sort2()int i,j;GradeInfo t;for (i=gp-1;i>=1;i-)for (
17、j=0;j<i;j+)if (gij.f>gij+1.f) / 如果改为 gij.f< gij+1.f 则为逆序 t=gij;gij = gij+1;gij+1 = t;gradeput();void gradeput()int i;for( i=0;i<gp;i+)printf("n学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分n");printf("%d%s%s%f%f%f%f%f%fn",gii.Id,gii.courseNo,gii.courseName,gii.a,gii.b,gii.c,gii.d,g
18、ii.e,gii.f);结束数据排序X=1?实际学分排序综合成绩排序结束YN四,运行与测试报告-Configuration: zhj - Win32 Debug-Compiling.Skipping. (no relevant changes detected)zhj.cppzhj.obj - 0 error(s), 0 warning(s)-1) 数据录入 2) 数据查询 3) 数据删除 4) 数据排序 5) 程序结束 1学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩-2 1) 学生基本情况查询 2) 成绩查询11) 按学号查询 2) 按宿舍查询1 输入学号1 学号 姓名
19、 性别 宿舍号码 电话号码 1 张成成 男 501 87732111-2 1) 学生基本情况查询 2) 成绩查询11) 按学号查询 2) 按宿舍查询2 输入宿舍号101 学号 姓名 性别 宿舍号码 电话号码 2 李成华 女 101 87723112 学号 姓名 性别 宿舍号码 电话号码 3 王成凤 女 101 87723112-2 1) 学生基本情况查询 2) 成绩查询2 输入学号1 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 1 A01 大学物理 3.000000 66.000000 78.000000 82.000000 79.000000 2.250
20、000 0.000000 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 1 B03 高等数学 4.000000 45.000000 -1.000000 88.000000 75.099998 3.000000 0.000000共修:2科,实得总分为:5.250000-3输入学号-4 1) 综合成绩排序 2) 实际学分排序1 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 2 C01 VF 3.000000 65.000000 76.00000066.000000 67.349998 1.800000 学号 课程编号 课程名称
21、 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 1 B03 高等数学 4.000000 45.000000 -1.000000 88.000000 75.099998 3.000000 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 1 A01 大学物理 3.000000 66.000000 78.000000 82.000000 79.000000 2.250000 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 2 B03 高等数学 4.000000 78.000000 -1.000000 90.000000 8
22、6.400002 3.200000-4 1) 综合成绩排序 2) 实际学分排序2 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 2 C01 VF 3.000000 65.000000 76.00000066.000000 67.349998 1.800000 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 1 A01 大学物理 3.000000 66.000000 78.000000 82.000000 79.000000 2.250000 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 1
23、 B03 高等数学 4.000000 45.000000 -1.000000 88.000000 75.099998 3.000000 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 2 B03 高等数学 4.000000 78.000000 -1.000000 90.000000 86.400002 3.200000-5Press any key to continue五,设计体会通过这次的程序设计实习,自己编写程序,从上百个错误慢慢的修改,经过自己的努力和老师的细心教导之下,错误逐渐的变少,最终可以运行了,这次的实习中,我磨练了自己的毅力和耐力,让我的信心
24、倍增,在这短短的24的学时里,我体会到了苦与甜,更让我学到了很多的知识,在以后的工作中肯定会非常有用的,使对未来的生活充满了信心。#include <stdio.h>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
25、 f; / 实际学分 GradeInfo;/ 定义结构数组为全局变量StudentInfo si100; / 学生信息结构数组GradeInfo gi500; / 学生成绩结构数组int sp=0; / 学生信息结构数组中学生数int gp=0; / 学生成绩结构数组中成绩数void ReadFile();void DisplayMainMenu();void DataInput();void DataQuery();void DataDelete();void DataSort();void QueryById(int );void QueryByRoom(int );void QueryG
26、rade(int );void sort1();void sort2();void gradeput();/ 主程序的结构void main()int x;ReadFile(); / 从文件中读取数据对两个结构数组赋值, 采用子函数的形式可以使主程序结构清楚int flag =1;while (flag) DisplayMainMenu(); / 因为要多次调用工作菜单,要采用子函数的形式scanf ("%d",&x);switch (x)case 1 :DataInput(); break; /case 2 :DataQuery(); break; /case 3
27、 :DataDelete(); break; /case 4 :DataSort(); break; / case 5 :flag = 0;void ReadFile( ) FILE *fp;fp = fopen("A.txt","r");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"
28、;,"r");while (!feof(fp)fscanf (fp,"%d%s%s%f%f%f%f",&gigp.Id,gigp.courseNo,gigp.courseName,&gigp.a,&gigp.b,&gigp.c, &gigp.d);if (gigp.c = -1) gigp.e = 0.3*gigp.b+0.7*gigp.d;else gigp.e = 0.15*gigp.b+0.15*gigp.c+0.7*gigp.d;if ( gigp.e >= 90. ) gigp.f = gigp.a
29、;else if ( gi gp.e >= 80. ) gigp.f = gigp.a *0.8;else if ( gigp.e >= 70. )gigp.f = gigp.a *0.75;else if ( gigp.e >= 60. ) gigp.f = gigp.a *0.6;else gigp.f = 0;gp+;fclose(fp);void DisplayMainMenu()printf ("n 1)数据录入 n 2)数据查询 n 3)数据删除 n 4)数据排序 n 5)程序结束 n ");void DataInput()printf (&q
30、uot;学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩n");scanf ("%d%s%s%f%f%f%f",&gigp.Id,gigp.courseNo,gigp.courseName,&gigp.a,&gigp.b,&gigp.c, &gigp.d);if (gigp.c = -1) gigp.e = 0.3*gigp.b+0.7*gigp.d;else gigp.e = 0.15*gigp.b+0.15*gigp.c+0.7*gigp.d;if ( gigp.e >= 90. ) gigp.f
31、 = gigp.a;else if ( gi gp.e >= 80. ) gigp.f = gigp.a *0.8;else if ( gigp.e >= 70. )gigp.f = gigp.a *0.75;else if ( gigp.e >= 60. ) gigp.f = gigp.a *0.6;else gigp.f = 0;gp+;void DataQuery()int x,y,z;printf( "n 1)学生基本情况查询n 2)成绩查询n");scanf("%d",&x);if (x = 1) / 查询学生信息pr
32、intf ("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 ("%
33、d",&y);QueryGrade(y);void DataDelete()int x;int i=0;int k,d;printf( "输入学号n");scanf( "%d",&x);while( sii.Id != x) i+;if (i<sp-1)for ( k=i; k<sp-1; k+)sik = sik+1; / 删除一个数据后,其他数据前移if ( i<sp) sp-;d = 0; / 成绩数组中,有多个相同的学号,都要删除,并且后面的数据需要前移for (k=0;k<gp;k+)if ( gik.Id = x ) d+;else gik-d = gik;gp = gp - d;void QueryById(int x)int i;for (i=0;i<sp;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;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版小学数学二年级上册《有多少点子:乘法的直观模型》教学设计
- Kimi关键词排名优化服务商深度测评:长文本AI时代的品牌知识占位策略
- 2026公卫科工作内容培训
- 社区护理学(成教专科)第8章 社区特殊人群的保健与护理
- 八年级地理“中国区域差异”单元复习教学设计
- 八年级上册物理同步教案(人教版)
- 初中八年级地理(中图版)·气温与降水知识清单
- 初中八年级道德与法治《人民代表大会制度:我国的根本政治制度》教学设计
- 初中八年级历史上册第1课《鸦片战争》核心素养导向导学案
- 初三物理中考复习专题:简单机械(杠杆与滑轮)核心原理深度整合与高阶应用教案
- 2025~2026学年湖北省武汉市Joinin外研剑桥英语第一学期五年级期末英语试卷
- 2026山东济南南美城乡发展有限公司及其权属子公司招聘7人笔试参考题库及答案详解
- 【七下历史】期末集训01 选择题100题(原卷版)
- 2026年高考全国II卷地理真题试卷(含答案)
- 2025年江西省公安厅招聘警务辅助人员笔试真题(附答案)
- 2026年云南校长职级测试卷含答案详解【典型题】
- 2026年浙江省杭州市重点学校小升初数学考试试题题库(答案+解析)
- 2026年技术经纪人题库试题附答案详解(综合卷)
- 电力重大事故隐患判定标准及治理监督管理规定宣贯
- 2026年湖北省咸宁市八年级地理生物会考试卷题库及答案
- (2026版)低钠血症中国专家共识课件
评论
0/150
提交评论