基于c语言的学分管理系统方案

合集下载

学生学分管理系统c语言报告

学生学分管理系统c语言报告

学生学分管理系统c语言报告1. 引言学分管理系统是一个帮助学校管理学生课程学分的重要工具。

通过该系统,学校可以实时了解学生的学分情况,帮助他们做出正确的课程选择,并按照规定的学分要求进行管理。

本报告将介绍一个使用C语言编写的学生学分管理系统的设计与实现。

2. 功能需求本学生学分管理系统具有以下功能需求:1. 学生信息管理:支持学生基本信息的录入、查询、修改和删除。

2. 课程信息管理:支持课程基本信息的录入、查询、修改和删除。

3. 学生选课管理:支持学生选课、退课和查询选课情况。

4. 学生学分管理:支持学生学分的自动计算和查询学分情况。

3. 数据结构设计为了实现学生学分管理系统的功能,需要设计相应的数据结构。

以下是我们设计的主要数据结构:1. 学生信息结构体:包含学生的学号、姓名、性别、年级等信息。

2. 课程信息结构体:包含课程的编号、名称、学分等信息。

3. 选课信息结构体:包含学生选课的学号和课程编号。

4. 学分信息结构体:包含学生的学号和已获得的学分。

除了上述数据结构外,我们还需要定义相应的链表来存储学生信息、课程信息和选课信息,以便实现各项功能需求。

4. 系统设计与实现为了实现学生学分管理系统的功能需求,我们使用了C语言来进行系统的设计与实现。

以下是系统的设计与实现步骤:1. 定义学生信息、课程信息、选课信息和学分信息的结构体。

2. 定义学生信息、课程信息、选课信息和学分信息的链表。

3. 实现学生信息的录入、查询、修改和删除功能。

4. 实现课程信息的录入、查询、修改和删除功能。

5. 实现学生选课、退课和查询选课情况的功能。

6. 实现学生学分的自动计算和查询学分情况的功能。

5. 系统测试与优化在完成系统设计与实现后,我们进行了系统测试与优化。

测试过程主要包括对各项功能的正确性进行验证,包括学生信息的录入、查询、修改和删除功能,课程信息的录入、查询、修改和删除功能,学生选课、退课和查询选课情况的功能,以及学生学分的自动计算和查询学分情况的功能。

C语言课程设计—学生成绩管理系统

C语言课程设计—学生成绩管理系统

#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。

h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。

用c语言编写学分管理系统-成绩管理系统

用c语言编写学分管理系统-成绩管理系统
printf("\t\t\t*** 1-按学号修改 ***\n");
printf("\t\t\t*** 2-按姓名修改 ***\n");
printf("\t\t\t*** 3-按班级修改 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");
}
void modi1()
{ char sn[11];
int i;
printf("请输入要修改学分学生的学号:");
scanf("%s",sn);
for(i=0;i<n;i++)
printf("\按任意键继续");
break;
}else printf("\n对不起!没有该姓名,任意键继续");
getch();
}
void query3()
{ char sn[10];
int i;
printf("请输入要查询的班级:");
{ case 0:break;
case 1:input();break;
case 2:print();break;
case 3:query();break;
case 4:modi();break;
case 5:del();break;
scanf("%s%s%s%d%d%d%d%d",st[n].num,st[n].name,st[n].class,&st[n].jichu,&st[n].zhuanye,&st[n].xuanxiu,&st[n].renwen,&st[n].shiyan);

C语言实训报告 学分管理系统解析

C语言实训报告  学分管理系统解析

HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计实训报告实训题目:学分管理程序专业:计算机科学与技术班级: K1273-5 姓名:涂瑞成绩:完成日期: 2014年 7月8日指导教师: 张吴波目录1.实训题目与要求 (3)2.系统设计 (4)3.程序测试与运行结果 (7)4.实训总结 (10)5.程序源代码 (12)1.实训题目与要求学分管理程序问题描述:请设计一个学生的学分管理程序,以方便教务部门对学生已完成学分的管理。

假设每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8个学分、实验性课程20学分才能毕业。

因此在管理学分时,要考虑每个学分所属于的课程类别。

其中各类别的课程所完成的学分最多不会超过100分。

该程序应该具有以下功能:(1)能从键盘输入某位学生的信息(不包含学分)。

(2)给定学号,显示该学生的所完成的学分。

(3)给定学号,能修改该学生所完成的学分。

(4)给定学号,将学生从程序中删除。

(5)能显示已完成学分可以毕业的学生。

题目要求:(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。

(2)学分信息应该包括学生信息(学号、姓名、班级、入学时间)、基础课学分、专业课学分、选修课学分、人文类课程学分、实验性课程学分。

(3)为程序设计windows窗口,在该窗口上以按钮的形式为用户提供“菜单”,通过点击各个功能项对应的按钮完成操作。

输入要求:(1)用户可以根据需求,选定相应的操作项目。

进入每个操作后,通过窗口的文本框,从键盘输入相应的信息。

程序根据用户输入的信息完成相应的处理,实现要求的功能。

(2)能对输入的数据进行简单的校验,例如,学生的学分是[0,100]范围内的数,入学时间必须是合法的日期,学号是唯一的(一个学号对应一个学生的学分信息)。

输出要求:(1)应用程序运行后,要在屏幕上显示一个按钮形式的“菜单”。

学生成绩管理系统c语言课程设计

学生成绩管理系统c语言课程设计

学生成绩管理系统c语言课程设计1. 介绍学生成绩管理系统是一种可以帮助学校或教育机构管理学生的成绩信息的软件系统。

它能够记录和管理学生的各门课程的成绩,提供成绩查询、统计分析以及生成报表的功能。

在这个项目中,我们将使用C语言来设计和实现一个简单的学生成绩管理系统。

2. 功能需求2.1 学生信息管理•添加学生信息:输入学生的学号、姓名、性别、年龄等基本信息,并将其保存到系统中。

•修改学生信息:根据学生的学号或姓名,找到对应的学生信息,并允许修改其基本信息。

•删除学生信息:根据学生的学号或姓名,找到对应的学生信息,并从系统中删除。

2.2 成绩管理•录入学生成绩:输入学生的学号或姓名,根据学号或姓名找到对应的学生信息,并记录其各门课程的成绩。

•查询学生成绩:根据学生的学号或姓名,找到对应的学生信息,并显示其各门课程的成绩。

•统计学生成绩:计算学生的总分、平均分等统计信息,并按照成绩排名进行排序并显示。

•生成成绩报表:将学生的成绩信息按照一定的格式输出到文件中,以方便查阅和打印。

2.3 界面设计•主菜单:显示系统的功能选项,包括学生信息管理、成绩管理、退出等选项。

•学生信息管理菜单:显示学生信息管理的功能选项,包括添加学生信息、修改学生信息、删除学生信息等选项。

•成绩管理菜单:显示成绩管理的功能选项,包括录入学生成绩、查询学生成绩、统计学生成绩、生成成绩报表等选项。

•输入提示:在功能选项中,根据需要给出相应的输入提示,以引导用户正确地操作系统。

3. 设计思路3.1 数据结构设计为了实现学生成绩管理系统,我们需要设计合适的数据结构来存储学生信息和成绩。

在这个项目中,我们可以使用结构体来表示学生信息,如下所示:struct Student {int id; // 学号char name[20]; // 姓名char gender[10]; // 性别int age; // 年龄float grades[5]; // 各门课程成绩};3.2 模块设计为了实现功能需求中的各项功能,我们需要设计相应的模块来实现。

学分管理程序c语言

学分管理程序c语言

学分管理程序c语言以下是一个简单的学分管理程序示例,使用 C 语言编写。

该程序可以对学生的学分进行管理,包括录入、查询和统计功能。

```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_STUDENTS 100#define MAX_CREDITS 10// 学生结构体struct Student {char name[50];int credits[MAX_CREDITS];int totalCredits;};// 函数声明void addStudent(struct Student* students, int studentCount);void queryStudent(struct Student* students, int studentCount);void printStatistics(struct Student* students, int studentCount);int main() {// 学生数量int studentCount;printf("请输入学生数量:");scanf("%d", &studentCount);// 学生信息数组struct Student* students = (struct Student*)malloc(studentCount * sizeof(struct Student));// 添加学生信息addStudent(students, studentCount);// 查询学生信息queryStudent(students, studentCount);// 打印统计信息printStatistics(students, studentCount);// 释放内存free(students);return 0;}// 添加学生信息void addStudent(struct Student* students, int studentCount) {for (int i = 0; i < studentCount; i++) {struct Student* student = &students[i];printf("请输入第 %d 个学生的姓名:", i + 1);scanf("%s", student->name);printf("请输入该学生的学分(最多 %d 个学分):", MAX_CREDITS); for (int j = 0; j < MAX_CREDITS; j++) {scanf("%d", &student->credits[j]);}student->totalCredits = 0;for (int j = 0; j < MAX_CREDITS; j++) {student->totalCredits += student->credits[j];}}}// 查询学生信息void queryStudent(struct Student* students, int studentCount) {printf("请输入要查询的学生姓名:");char name[50];scanf("%s", name);for (int i = 0; i < studentCount; i++) {struct Student* student = &students[i];if (strcmp(student->name, name) == 0) {printf("姓名:%s\n", student->name);printf("总学分:%d\n", student->totalCredits);printf("学分详情:");for (int j = 0; j < MAX_CREDITS; j++) {printf("%d ", student->credits[j]);}printf("\n");return;}}printf("未找到该学生\n");}// 打印统计信息void printStatistics(struct Student* students, int studentCount) {int totalCredits = 0;for (int i = 0; i < studentCount; i++) {totalCredits += students[i].totalCredits;}printf("学生总数:%d\n", studentCount);printf("总学分:%d\n", totalCredits);}```上述代码中,我们使用结构体来表示学生信息,包括姓名和学分。

c语言学生成绩管理系统课程设计

c语言学生成绩管理系统课程设计

c语言学生成绩管理系统课程设计一、课程目标知识目标:1. 学生能理解C语言在开发学生成绩管理系统中的应用和重要性。

2. 学生掌握C语言中的基本数据类型、运算符、控制结构等基础知识,并能运用到成绩管理系统的设计与实现中。

3. 学生能掌握文件操作、数组、结构体等C语言高级特性,用以存储、查询和管理学生成绩。

技能目标:1. 学生能够运用所学知识,设计并编写一个简单的学生成绩管理系统。

2. 学生通过实际操作,培养解决问题的能力,包括分析需求、设计算法、编写程序和测试代码。

3. 学生通过小组合作,提升团队协作能力和项目管理的实践技能。

情感态度价值观目标:1. 学生在学习过程中培养对编程的兴趣和热情,增强对信息技术的认同感。

2. 学生通过解决实际问题,体会编程带来的成就感,激发进一步学习的动力。

3. 学生在团队合作中学会相互尊重、倾听和沟通,培养积极向上的情感态度。

课程性质:本课程是计算机科学与技术学科的一门实践性课程,强调理论与实践相结合,注重培养学生的实际操作能力和创新思维。

学生特点:高年级学生对C语言有一定的基础知识,具备一定的编程能力和问题解决能力。

教学要求:课程要求学生在理解基本概念的基础上,通过项目驱动的教学方式,动手实践,将理论知识转化为实际应用。

通过课程学习,学生应达到以上设定的知识、技能和情感态度价值观目标,为后续的深入学习打下坚实基础。

二、教学内容本课程教学内容主要包括以下几部分:1. C语言基础知识回顾:数据类型、变量、运算符、控制结构等,确保学生具备扎实的编程基础。

2. 文件操作:文件打开、关闭、读写等操作,为成绩管理系统中的数据持久化提供支持。

3. 数组与字符串:数组的使用、字符串处理,用于存储和管理学生成绩信息。

4. 结构体:自定义结构体类型,用于表示学生信息和成绩。

5. 函数:模块化编程,提高代码可读性和可维护性。

6. 项目实践:设计并实现一个学生成绩管理系统,涵盖以下功能:- 录入学生信息- 修改学生信息- 删除学生信息- 查询学生信息- 成绩排名- 成绩统计分析7. 教学大纲:- 第一周:C语言基础知识回顾,数组与字符串操作- 第二周:结构体、函数,文件操作- 第三周:项目需求分析,设计系统框架- 第四周:编写代码,实现各功能模块- 第五周:系统测试,优化代码,撰写项目报告教学内容与教材关联性:本课程教学内容紧密结合教材中的相关章节,如数据类型、控制结构、文件操作等,确保学生所学知识的系统性和科学性。

c语言学生成绩管理系统课程设计

c语言学生成绩管理系统课程设计

c语言学生成绩管理系统课程设计一、教学目标本课程的教学目标是使学生掌握C语言学生成绩管理系统的开发方法,培养学生的编程能力和实际应用能力。

具体分为以下三个部分:1.知识目标:学生需要掌握C语言的基本语法、数据结构、函数、文件操作等编程知识,了解学生成绩管理系统的需求分析和系统设计方法。

2.技能目标:学生能够运用C语言独立完成一个学生成绩管理系统的设计和实现,具备一定的编程实践能力和问题解决能力。

3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,增强学生对技术改变生活的认识,培养学生的创新精神和团队合作意识。

二、教学内容教学内容以教材《C语言程序设计》为主线,结合实际应用需求,安排如下:1.C语言基础知识:数据类型、运算符、控制结构、数组、字符串等。

2.函数与模块化编程:函数定义与调用、局部变量与全局变量、递归、文件操作等。

3.数据结构:链表、栈、队列、树等。

4.学生成绩管理系统设计:需求分析、系统设计、模块划分、编程实现等。

5.调试与优化:调试方法、性能分析、代码优化等。

三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合,以激发学生的学习兴趣和主动性。

1.讲授法:用于传授C语言基本语法和编程原理,帮助学生建立扎实的理论基础。

2.案例分析法:通过分析实际案例,让学生了解学生成绩管理系统的需求分析和设计方法,提高学生的实际应用能力。

3.实验法:安排实验课,让学生动手编写代码,培养学生的编程实践能力和问题解决能力。

四、教学资源教学资源包括教材、多媒体资料、实验设备等,以支持教学内容和教学方法的实施,丰富学生的学习体验。

1.教材:《C语言程序设计》。

2.多媒体资料:教学PPT、视频教程、在线编程练习等。

3.实验设备:计算机、网络设备、编程环境等。

五、教学评估教学评估是检验学生学习成果的重要手段,主要包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1引言现今大学对学生成绩管理以及学生水平评定过程中,不仅依靠学生分数,而且把各个科目的掌握情况通过学分来反映,众所周知,大学人数众多,单靠人工在纸质介质上记录,既浪费资源又不方便管理,并且错误率高,学分管理系统就是基于现今大学在学生成绩管理过程中采用学分制,应运而生的计算机数据管理系统,对在校生进行学分数据录入、修改、删除、查找、排序以及对学分得分的初步统计,并存储学生学分数据的计算机数据管理系统。

利用学分管理系统可以有效的帮助管理者,来管理学生学分数据,并能够了解各个班级学生学分完成情况,从而节约了管理过程中的人力物力,并且存贮方便、准确。

学生学分管理系统是运行于计算机系统下的应用软件,主要用于对学生的学号、以及各项学科学分进行录入、删除、修改、查询、排序、统计、存盘等操作,为学校的教师和学生提供了一个对学生学分进行管理和查看的平台,给用户提供了一个简单友好的用户接口,主要任务如下:1.1查看所有学生信息根据菜单提示,选择该功能,能够逐条显示全部学生学分记录1.2输入学生记录用户根据菜单提示选择输入学生记录选项,进行有关学生的学号、、班级、基础课学分、专业课学分、选修课学分、人文类课学分以及实验课学分的录入。

可一次性输入多条学生的学分信息记录。

1.3删除学生记录根据提示,用户输入要进行删除学生的学号,如果在不存在该学号,则显示没有找到该学生;如果在文件中有该学号的信息存在,则将该学号所对应的、学号、班级、各科学分等在对应文件中加以删除。

1.4修改学生记录根据提示,用户输入要进行修改学分记录的学生的学号,如果在文件中不存在该学号,则显示没有找到该学生;如果在文件中有该学生的信息存在,则将提示用户选择要修改的某课程,当用户选择某课程的代码后,则将显示你所要修改的课程。

然后提示用户选择是否继续进行修改操作。

1.5查询学生信息查询学生信息,分为根据学号查询和根据班级查询两个具体需求,菜单选项分别提示用户输入要查询学生信息的学号或班级,如果在磁盘文件中有对应的输入信息,则提示用户已找到,并逐项列出对应查找到的学生学分状况。

1.6根据学号排序学生记录该项功能根据学生的学号项进行排序,以便用户对学生学分状况有较为直观方便的了解,并能够让学号有规律排列的学生项,在显示时集中出现,让浏览者更加清楚明白。

1.7统计学生学分完成情况该项是统计各班学生的学分完成情况,可以很方便了解该班学生的学习水平。

进行总体设计,以比较抽象的方式概括的确定系统如何完成预定的任务,进而确定组成系统的每个子程序的结构,从而将一个大的程序按功能分割成一些模块,是每个模块具有功能单一、结构清晰、接口简单易于理解的小程序,并且确定各个函数之间的调用关系。

本系统主要应用结构化的设计思想,实现学生学分的输入、删除、修改、查询以及浏览等管理功能,各主要模块的数据均存储在文件中,因此包含对文件的读、写等基本操作。

在软件开发过程中应用了高级语言程序设计中的基本控制结构,如选择、循环、顺序等结构。

系统的设计方法是结构化设计方法,采用C 语言进行开发。

系统功能结构图,如图1所示。

图1 系统结构图本系统采用主函数调用子函数的设计方法,先整体在逐步细化的过程,具体方法如下:在主函数前,进行子函数声明,如下:void menu();//菜单函数void to_menu();//返回菜单函数void view_data();//查看所有学生信息void save_data();//保存数据void add_data();//输入学生数据void read_data();//读取数据void delete_data();//删除数据void edit_data();//修改数据void query_data_no();//查找(按学号)void query_data_clas();//查找(按班级)void sort_data_no();//排序(学号)void tongji();//统计某班学生学分完成情况3.1主函数设计编写主函数,主函数运行时,先调用void read_data()函数,将数据从文件读取到结构体数组中,再调用菜单函数void menu(),显示菜单选择项,设计一个while循环,让函数进入循环,设计switch函数,对菜单各项功能进行选择,使各项功能能够运行,最后退出循环,调用to_menu()函数,返回主菜单。

main(){int fun;read_data();menu();while(1){printf("请输入功能号[0-8]:",&fun);scanf("%d",&fun);switch(fun){case 0: break; // 退出case 1: view_data();break; // 查看所有学生信息case 2: add_data(); break; // 输入学生记录case 3: delete_data();break; // 删除学生记录case 4:edit_data();break; // 修改学生记录case 5: query_data_no();break; // 查询(学号)case 6:query_data_clas();break; // 查询(班级)case 7:sort_data_no(); break; // 排序(学号)case 8:tongji();break; //统计某班学生学分完成情况default:printf("输入错误!");break;}if(fun==0) break;to_menu();}}3.2子函数设计3.2.1菜单函数设计菜单函数首先运行库函数system("cls")进行清屏,然后运行各个printf 语句,显示主菜单,如图2所示。

图2 系统主菜单3.2.2返回主菜单函数设计设计字符c1,c2,用c1来接受第一次输入的回车,然后再次输入回车时,调用函数menu(),返回主菜单,来实现各次操作完成后返回主菜单的任务。

3.2.3查看所有学生信息函数设计设计for循环,定义i=0,学生总数为dd.count,利用for循环,可以显示所有学生已经记录的信息。

如图3所示:图3 查看所有学生信息3.2.4数据从结构体数组保存到文件的函数设计创建文件data.txt,利用for循环,把数据逐个写入文件。

3.2.5输入学生记录函数设计根据printf语句提示,逐个输入学号、、班级,调用库函数strcpy(),把各个输入项,拷贝到数组中,再对各项分数进行赋值,如果大于最大值,则显示最大值,设计成循环模式,末尾提示是否继续添加数据,利用break终止循环,最后存盘,退出程序,显示主菜单。

输入学号为106的学生信息后如图4所示。

图4 输入学生信息3.2.6删除学生记录函数设计设计for循环以及库函数strcmp(),把输入的学号,跟已有的学号进行对比,如果没有相同的学号,则提示没有找到该学生,如果找到相同的学号,则把该学号以后的数据向前移动一位,再把学生总数减一,实现删除学生。

删除过程如下图5和图6所示。

图5 输入要删除的学生图6 删除后显示3.2.7修改学生记录函数设计根据printf语句提示,输入要修改的学生的学号,设计for循环和库函数strcmp,对输入学号进行查找,如果没有查找到,显示没有找到该学生,如果能够查找到给学生,则进一步提示输入学生的、班级,然后选择要修改的学生记录项,最后提示,是否继续录入,退出后可返回主菜单。

修改过程如下图7和图8所示。

图7 编辑学生信息窗口3.2.8查询学生记录函数设计查询学生记录分为,根据学生学号查询和根据班级查询该班所有学生的成绩,设计for 循环和调用ctrcmp()函数,把要查询的结果进行显示,如果没有找到与输入匹配的字符,则显示没有找到该班级或没有找到该学生。

查询显示如下图,根据学号查询如图9所示,根据班级查询如图10所示。

3.2.9排序函数设计设计while 循环,用for 循环和库函数strcmp 将学号依次比较,然后用冒泡排序法将学号数据由小到大排列,并且各数据交换,完成排序。

排序结果如下图11所示。

图8 修改学生信息完成图9 根据学号查询学生信息 图10 根据班级查询学生信息图11 根据学号排序结果3.2.10统计函数设计输入要统计的班级号,调用strcmp函数,查找相同班级号的学生数据,再设计for循环并调用strcmp函数,把差找出的学生数据,与要求完成的学分标准进行对比,统计出符合要求和不符合要求的学生个数,最后显示。

统计结果如下图12所示。

图12 根据班级统计结果4总结本系统可以完成学生学分的录入、查询、修改、删除、排序以及班级总体水平的统计功能,但是对于系统的访问权限设置,访问途径(网络访问还是单机使用)等功能,还没有提出解决的方案,在这些问题上还有待于对系统的进一步开发完善。

学分管理系统是介于学生管理者和学生之间的一个数据库平台,他让数据管理者可以方便的录入修改学生成绩,在管理过程中可以节省时间,增加工作效率,假如学生可以通过网络来进行查询,就可以避免学分改动而引发的矛盾,同时也可以给学生带来方便,因此在访问途径上可以设置为单机服务器管理,网络访问的数据库模式,来为学生和学校之间提供一个信息查询的平台。

本系统的开发过程,主要利用了for循环、switch循环、库函数strcmp与strcpy等,在排序函数设计时,略显繁琐,有待于使用者在使用时,提出宝贵的意见和建议。

通过对本程序的开发,让我了解到一个完整系统的开发过程,将一个大的工程问题可以细化到各个模块,让每个模块可以独立去完成各自的功能,最后用函数之间的调用来解决程序开发的全部问题,让我在以后开发程序的道路上更加拥有信心。

参考文献[1] 启兰.库存管理[M].北京:高等教育,2005[2] 谭浩强,基温.C语言程序设计教程(第3版)[M].北京:高等教育,2006[3] 黄明、梁旭、万洪莉.C语言课程设计[M].北京:电子工业,2006[4] 郭宁,小玲.管理信息系统[M].北京:人民邮电,2006[5] 池龙,林,伟.实用软件工程[M].北京:电子工业,2006附录#include <stdio.h>#include <io.h>#include <stdlib.h>#include <string.h>#define MAX 60struct student{char no[10]; // 学号char name[50]; //char clas[5]; // 班级int score[5]; // 学分};struct data{int count; // 当前学生数组中学生的个数 struct student stu[MAX]; // 学生数组} dd;//子函数声明void menu();//菜单函数void to_menu();//返回菜单函数void view_data();//查看所有学生信息void save_data();//保存数据void add_data();//输入学生数据void read_data();//读取数据void delete_data();//删除数据void edit_data();//修改数据void query_data_no();//查找(按学号)void query_data_clas();//查找(按班级)void sort_data_no();//排序(学号)void tongji();//统计某班学生学分完成情况// 主函数main(){int fun;read_data();menu();while(1)printf("请输入功能号[0-8]:",&fun);scanf("%d",&fun);switch(fun){case 0: break; // 退出case 1: view_data();break; // 查看所有学生信息case 2: add_data(); break; // 输入学生记录case 3: delete_data();break; // 删除学生记录case 4:edit_data();break; // 修改学生记录case 5: query_data_no();break; // 查询(学号)case 6:query_data_clas();break; // 查询(班级)case 7:sort_data_no(); break; // 排序(学号)case 8:tongji();break; //统计某班学生学分完成情况default:printf("输入错误!");break;}if(fun==0) break;to_menu();}}void menu()/*显示主菜单*/{system("cls");//清屏printf("\n");printf("\t\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n"); printf("\t\t☆☆\n"); printf("\t\t☆★☆学分管理系统☆★☆\n"); printf("\t\t☆☆\n"); printf("\t\t☆ [0] 退出 [1] 查看所有学生信息☆\n"); printf("\t\t☆☆\n"); printf("\t\t☆ [2] 输入学生记录 [3] 删除学生记录☆\n"); printf("\t\t☆☆\n"); printf("\t\t☆ [4] 修改学生记录 [5] 查询(学号)☆\n"); printf("\t\t☆☆\n"); printf("\t\t☆ [6] 查询(班级) [7] 排序(学号)☆\n"); printf("\t\t☆☆\n"); printf("\t\t☆ [8]统计某班学生学分完成情况☆\n"); printf("\t\t☆☆\n"); printf("\t\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n\n");}void to_menu()// 等待用户按回车后回到主菜单char c1,c2;printf("\n\n\n按回车键返回主菜单...");scanf("%c%c",&c1,&c2);//第一个字符吸收上次的确认回车键menu();}void view_data()// 查看所有学生信息{int i;printf("学号\t\t 班级\t 基础课\t 专业课选修课人文类课实验课\n");printf("\n-------------------------------------------------------------------\n");for(i=0;i<dd.count;i++)printf("%s\t %s\t %s\t %d\t %d\t %d\t %d\t %d\n",dd.stu[i].no,d d.stu[i].name,dd.stu[i].clas,dd.stu[i].score[0],dd.stu[i].score[1],dd .stu[i].score[2],dd.stu[i].score[3],dd.stu[i].score[4]);}void save_data()// 将数据从结构体数组保存到文件中{FILE *fp;//文件指针int i,k;k=dd.count;fp=fopen("dada.txt","w");//文件存储位置:当前文件夹fwrite(&k,sizeof(int),1,fp);for(i=0;i<k;i++)fwrite(&dd.stu[i],sizeof(struct student),1,fp);fclose(fp);}void add_data()// 输入学生记录{struct student st;int b;int a;int k;while(1){printf("\n请输入学生信息:");printf("\n学号\t\t班级");printf("\n---------------------------------------------------------------\n");scanf("%s%s%s",st.no,,st.clas);k = dd.count;strcpy(dd.stu[k].no,st.no);strcpy(dd.stu[k].name,);strcpy(dd.stu[k].clas,st.clas);printf("\n请输入基础课学分(0-50):"); scanf("%d",&a);if(a>50) dd.stu[k].score[0]=50;else dd.stu[k].score[0]=a;printf("\n请输入专业课学分(0-50):"); scanf("%d",&a);if(a>50) dd.stu[k].score[1]=50;else dd.stu[k].score[1]=a;printf("\n请输入选修课学分(0-24):"); scanf("%d",&a);if(a>24) dd.stu[k].score[2]=24;else dd.stu[k].score[2]=a;printf("\n请输入人文课学分(0-8):"); scanf("%d",&a);if(a>8) dd.stu[k].score[3]=8;else dd.stu[k].score[3]=a;;printf("\n请输入实验课学分(0-20):"); scanf("%d",&a);if(a>20) dd.stu[k].score[4]=20;else dd.stu[k].score[4]=a;dd.count++;printf("\n\n继续添加学生信息[1-yes 0-no]:");scanf("%d",&b);if(b==0) break;}save_data();}void read_data()// 将数据从文件读到结构体数组中{FILE *fp;int i,k;struct student st;k=0;if(access("dada.txt",0)==-1) // 如果文件不存在{fp=fopen("dada.txt","w");fwrite(&k,sizeof(int),1,fp);fclose(fp);}fp=fopen("dada.txt","r");fread(&k,sizeof(int),1,fp);dd.count=k;for(i=0;i<k;i++){fread(&st,sizeof(struct student),1,fp);strcpy(dd.stu[i].no,st.no);strcpy(dd.stu[i].name,);strcpy(dd.stu[i].clas,st.clas);dd.stu[i].score[4]=st.score[4];dd.stu[i].score[3]=st.score[3];dd.stu[i].score[2]=st.score[2];dd.stu[i].score[1]=st.score[1];dd.stu[i].score[0]=st.score[0];}fclose(fp);}void delete_data()// 删除学生记录{int i,k,j;char no[10];printf("\n请输入要删除学生的学号:");scanf("%s",no);k=-1;for(i=0;i<dd.count;i++){if(strcmp(dd.stu[i].no,no)==0){k=i;break;}}if(k==-1){printf("\n\n没有找到该学生(学号-%s)!",no); }else{for(j=k;j<dd.count-1;j++){dd.stu[j]=dd.stu[j+1];}save_data();printf("\n\n删除学生(学号-%s)记录成功!",no);dd.count--;}}void edit_data()// 修改学生记录{struct student st;int i,k,a,b,select;char no[10];printf("\n请输入要编辑学生的学号:");scanf("%s",no);k=-1;for(i=0;i<dd.count;i++){if(strcmp(dd.stu[i].no,no)==0){k=i;break;}}if(k==-1){printf("\n\n没有找到该学生(学号-%s)!",no);}else{printf("\n\t班级\n");printf("\n----------------------------------\n");scanf("%s%s",,st.clas);strcpy(dd.stu[k].name,);strcpy(dd.stu[k].clas,st.clas);printf("1基础课***2专业课***3选修课***4人文类课***5实验课"); printf("请选择你要修改的课程");scanf("%d",&select);switch(select){case 1:printf("\n请输入基础课学分(0-50):"); scanf("%d",&a); if(a>50) dd.stu[k].score[0]=50;else dd.stu[k].score[0]=a;break;case 2:printf("\n请输入专业课学分(0-50):"); scanf("%d",&a); if(a>50) dd.stu[k].score[1]=50;else dd.stu[k].score[1]=a;break;case 3:printf("\n请输入选修课学分(0-24):"); scanf("%d",&a);if(a>24) dd.stu[k].score[2]=24;else dd.stu[k].score[2]=a;break;case 4:printf("\n请输入人文课学分(0-8):"); scanf("%d",&a);if(a>8) dd.stu[k].score[3]=8;else dd.stu[k].score[3]=a;break;case 5:printf("\n请输入实验课学分(0-20):"); scanf("%d",&a);if(a>20) dd.stu[k].score[4]=20;else dd.stu[k].score[4]=a;break;}printf("\n\n继续修改学生信息[1-yes 0-no]:");scanf("%d",&b);if(b==1)edit_data();elsesave_data();printf("\n\n编辑学生记录(学号-%s)成功!",no);}}void query_data_no()// 查询(学号){int i,k;char no[10];printf("\n请输入要查询学生的学号:");scanf("%s",no);k=-1;for(i=0;i<dd.count;i++){if(strcmp(dd.stu[i].no,no)==0){if(k==-1){printf("\n\n学号\t\t班级\t基础课\t专业课\t选修课\t人文类课\t实验课");printf("\n-----------------------------------------------------------------\n");}k=i;printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",dd.stu[i].no,dd.stu[i].name ,dd.stu[i].clas,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score [2],dd.stu[i].score[3],dd.stu[i].score[4]);}}if(k==-1){printf("\n\n没有找到该学生(学号-%s)!",no);}}void query_data_clas()// 查询(班级){int i,k;char clas[10];printf("\n请输入要查询学生的班级:");scanf("%s",clas);k=-1;for(i=0;i<dd.count;i++){if(strcmp(dd.stu[i].clas,clas)==0){if(k==-1){printf("\n\n学号\t\t班级\t基础课\t专业课\t选修课\t人文类课\t实验课");printf("\n-----------------------------------------------------------------\n");}k=i;printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",dd.stu[i].no,dd.stu[i].name ,dd.stu[i].clas,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score [2],dd.stu[i].score[3],dd.stu[i].score[4]);}}if(k==-1){printf("\n\n没有找到该班级-%s!",clas);}}void sort_data_no()// 排序(学号){int i,k;struct student tmp;k=dd.count-1;while(k>0){for(i=0;i<k;i++){if(strcmp(dd.stu[i].no,dd.stu[i+1].no)>0)//最大的放末尾 {strcpy(tmp.no,dd.stu[i].no);strcpy(,dd.stu[i].name);strcpy(tmp.clas,dd.stu[i].clas);tmp.score[4]=dd.stu[i].score[4];tmp.score[3]=dd.stu[i].score[3];tmp.score[2]=dd.stu[i].score[2];tmp.score[1]=dd.stu[i].score[1];tmp.score[0]=dd.stu[i].score[0];strcpy(dd.stu[i].no,dd.stu[i+1].no);strcpy(dd.stu[i].name,dd.stu[i+1].name);strcpy(dd.stu[i].clas,dd.stu[i+1].clas);dd.stu[i].score[4]=dd.stu[i+1].score[4];dd.stu[i].score[3]=dd.stu[i+1].score[3];dd.stu[i].score[2]=dd.stu[i+1].score[2];dd.stu[i].score[1]=dd.stu[i+1].score[1];dd.stu[i].score[0]=dd.stu[i+1].score[0];strcpy(dd.stu[i+1].no,tmp.no);strcpy(dd.stu[i+1].name,);strcpy(dd.stu[i+1].clas,tmp.clas);dd.stu[i+1].score[4]=tmp.score[4];dd.stu[i+1].score[3]=tmp.score[3];dd.stu[i+1].score[2]=tmp.score[2];dd.stu[i+1].score[1]=tmp.score[1];dd.stu[i+1].score[0]=tmp.score[0];}}k--;}save_data();printf("\n\n排序成功!");}void tongji() /*统计某班学生学分完成情况*/{ char clas[5]; int i,j=0,k=0;printf("\n请输入要统计的班级:");scanf("%s",clas);for(i=0;i<dd.count;i++){ if(strcmp(clas,dd.stu[i].clas)==0)j++;}for(i=0;i<dd.count;i++){ if(strcmp(clas,dd.stu[i].clas)==0&&dd.stu[i].score[0]>=50&&dd.stu[i].score[1]>=50&&dd.stu[i].score[2]>=24&&dd.stu[i].score[3]>=8&&dd.stu[i].score[4]>=20)k++; }printf("\n %s 班中有%d 个学生完成学分\n有%d 个学生未完成",clas,k,j-k);scanf("%*c"); /*******用于吸收上面所按下的字符************/ printf("\n\n按回车键回主菜单!");getchar();menu();}。

相关文档
最新文档