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

合集下载

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

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

*题目七:学生成绩管理系统设计学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。

主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单要求:使用二进制文件方式存储数据,系统以菜单方式工作源代码:#include<stdio.h>#include<ctype.h>#include<stdlib.h>#include<string.h>struct Student{int cls;char nam[10];char num[10];int chinese;int english;int computer;int math;}stud1[100],stud2[100];{char a;while(a>'7'||a<'0'){system("cls");printf(" 欢迎使用学生成绩管理系统\n");printf(" 制作人:章建\n");printf("********************** 学生成绩管理系统************************\n");printf(" 1.输入学生成绩\n");printf(" 2.输出学生成绩\n");printf(" 3.查找并显示学生成绩\n");printf(" 4.按姓名查找,修改学生资料\n");printf(" 5.显示所有学生名单\n");printf(" 6.查找并删除学生信息\n");printf(" 7.从文件读取数据\n");printf(" 0.储存学生资料并退出系统\n");printf("********************************************************************* *\n");printf("请选择(0-7)\n");a=getchar();}return(a-'0');}/******************************************************************************int Input(Student stud[],int n) //输入数据(第一学期)。

学生学分管理系统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语言源代码
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];
}
void save_data()// 将数据从结构体数组保存到文件中
{
FILE *fp;//文件指针
int i,k;
k=dd.count;
fp=fopen("dada.txt","w");//文件存储位置:当前文件夹
fwrite(&k,sizeof(int),1,fp);
case 5: query_data_no();break; // 查询(学号)
case 6:query_data_clas();break; // 查询(班级)
case 7:sort_data_no(); break; // 排序(学号)
case 8:tongji();break; //统计某班学生学分完成情况
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("\t\t☆ ☆\n");
printf("\t\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n\n");

用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语言

学分管理程序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语言版

1、2、编一程序,能计算每个学生的总分和平均分。

3、编一程序,能按输入要求打印各门课程的最高分和最低分的同学。

4、编一程序,能将五个学生的成绩按总分进行降序排序。

5、编一程序,能删除一个学生的记录;6、编一程序,能增加一个学生的记录;建立一个菜单模式的学生信息管理系统,完成功能如下:一、建立主菜单*****学生信息管理系统*****1、输入学生信息2、输出学生信息3、计算每个同学成绩的总分与平均分4、对学生成绩进行排序5、输出每门功课最高分的同学信息6、输出每门功课最低分的同学信息7、退出系统主菜单界面:二、将综合练习一中的程序改写为子程序并能通过主菜单进行调用。

先上图开发环境windows 7,vc 6.0 开始贴代码:/*************** 张海山* 10软件2班* 安庆职业技术学院* QQ:136533295******************/#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"typedef struct lode{int id;char name[20];char sex[10];int score[4];struct lode *next;}lode,*linklist;linklist input(linklist head)//输入学生信息{char cmd='y';int t,i,l;char name[10];char sex[2];int score[3]={0};//int sum;linklist p;while(cmd=='y'||cmd=='Y'){p=(linklist)malloc(sizeof(lode));printf("请输入学生的编号\n");fflush(stdin);scanf("%d",&t);p->id=t;printf("请输入学生的姓名:\n");fflush(stdin);scanf("%s",p->name);/* l=strlen(p->name);p->sex[l]='\0';/* for(i=0;i<l;i++){p->name[i]=name[i];}*/printf("请输入学生的性别:\n");fflush(stdin);scanf("%s",p->sex);/* l=strlen(p->sex);p->sex[l]='\0';/* for(i=0;i<l;i++){p->sex[i]=sex[i];}*/fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&score[0]);p->score[0]=score[0];fflush(stdin);scanf("%d",&score[1]);p->score[1]=score[1];fflush(stdin);scanf("%d",&score[2]);p->score[2]=score[2];fflush(stdin);p->next=head->next;head->next=p;printf("是否继续(y)&返回主菜单(n) y&n\n");fflush(stdin);scanf("%c",&cmd);}return head;}linklist print(linklist head){linklist p;int i=1;p=head->next;printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");while(p!=NULL){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);p=p->next;/*if(p==NULL)break;printf("%d\n",i);*/}//printf("%d\n",i);//printf("i=%d\n",i);return 0;}void avg(linklist head){int sum=0;double avg=0;linklist p;p=head->next;while(p!=NULL){sum=0;sum=p->score[1]+p->score[2]+p->score[0];avg=sum/3;printf("%s的总分为:%d\t平均分为:%.2lf\n",p->name,sum,avg);p=p->next;}}void maxmin(linklist head){linklist p;intmax1=0,max1index,min1=head->next->score[0],min1index,max2=0,max2index,min2=head->nex t->score[1],min2index,max3=0,max3index,min3=head->next->score[2],min3index;p=head->next;while(p!=NULL){if(max1<(p->score[0])){max1=p->score[0];max1index=p->id;}if(min1>=(p->score[0])){min1=p->score[0];min1index=p->id;}if(max2<(p->score[1])){max2=p->score[1];max2index=p->id;}if(min2>=(p->score[1])){min2=p->score[1];min2index=p->id;}if(max3<(p->score[2])){max3=p->score[2];max3index=p->id;}if(min3>=(p->score[2])){min3=p->score[2];min3index=p->id;}p=p->next;}printf("英语:\n");p=head->next;while(p!=NULL){if((p->id)==max1index)printf("英语最高分为:%d\t姓名为:%s\n",p->score[0],p->name);if((p->id)==min1index)printf("英语最低分为:%d\t姓名为:%s\n",p->score[0],p->name);p=p->next;}printf("数学:\n");p=head->next;while(p!=NULL){if((p->id)==max2index)printf("数学最高分为:%d\t姓名为:%s\n",p->score[1],p->name);if((p->id)==min2index)printf("数学最低分为:%d\t姓名为:%s\n",p->score[1],p->name);p=p->next;}printf("语文:\n");p=head->next;while(p!=NULL){if((p->id)==max3index)printf("语文最高分为:%d\t姓名为:%s\n",p->score[2],p->name);if((p->id)==min3index)printf("语文最低分为:%d\t姓名为:%s\n",p->score[2],p->name);p=p->next;}}void rank(linklist head){linklist p;int i=0,j,k,n=0;int sum[100];p=head->next;while(p!=NULL){n++;sum[i]=p->score[1]+p->score[2]+p->score[0];i++;p=p->next;}printf("n=%d\n",n);for(i=1;i<6;i++){for(j=0;j<6-i;j++)if(sum[j]<sum[j+1]){k=sum[j];sum[j]=sum[j+1];sum[j+1]=k;}}printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");for(i=0;i<n;i++){p=head->next;while(p!=NULL){if(sum[i]==(p->score[1]+p->score[2]+p->score[0])){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);break;}p=p->next;}}}void add(linklist head){linklist p,q;p=head;q=(linklist)malloc(sizeof(lode));printf("请输入要插入学生的序号:\n");fflush(stdin);scanf("%d",&q->id);fflush(stdin);printf("请输入学生的姓名:\n");scanf("%s",q->name);fflush(stdin);printf("请输入学生性别:\n");scanf("%s",q->sex);fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&q->score[0]);fflush(stdin);scanf("%d",&q->score[1]);fflush(stdin);scanf("%d",&q->score[2]);fflush(stdin);q->next=NULL;while(p->next!=NULL){p=p->next;}p->next=q;//p->next=NULL;}void del(linklist head){linklist p,temp;int j;p=head->next;temp=head;printf("请输入要删除学生记录的序号:\n");scanf("%d",&j);while(p!=NULL){if(p->id!=j){p=p->next;temp=temp->next;}else{temp->next=p->next;free(p);break;}}}void main(){int cmd;linklist head;head=(linklist)malloc(sizeof(lode));head->next=NULL;do{printf("\n\n |***************学生成绩管理程序***************|\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 主菜单|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 请输入选择项目:|\n");printf(" | |\n");printf(" | 1、输入学生成绩|\n");printf(" | |\n");printf(" | 2、输出学生成绩|\n");printf(" | |\n");printf(" | 3、计算总成绩、平均成绩|\n");printf(" | |\n");printf(" | 4、求最高分、最低分|\n");printf(" | |\n");printf(" | 5、排序|\n");printf(" | |\n");printf(" | 6、增加记录|\n");printf(" | |\n");printf(" | 7、删除记录|\n");printf(" | |\n");printf(" | 0、退出系统|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");scanf("%d",&cmd);switch(cmd){case 0:break; //退出系统case 1: input(head);break; //输入学生信息case 2: print(head);break; //输出学生信息case 3: avg(head);break; //求总成绩、平均数case 4: maxmin(head);break; //最高分case 5: rank(head);break; //排序case 6: add(head);break; //增加记录case 7: del(head);break; //删除记录default :printf("您输入错误!\n");}}while(cmd!=0);}因为是C语言版的要严格按照样子输入哦要不然就会出现不可预料的结果。

学生成绩管理系统c语言代码(供参考)

学生成绩管理系统c语言代码(供参考)

C程序学生管理系统以下是用c语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include"stdlib.h"#include"string.h"typedef struct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedef struct unit//定义接点{student date;struct unit *next;}unit;unit* build()//建立链表并返回指针{unit *p;if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>初始化失败!");return 0;}else{p->next=NULL;p->date.number=0;//头结点存放学生人数printf("初始化成功!\n");return p;}}void add(unit *head)//增加学生{unit *p,*q;int m,n=0;q=head->next;p=(unit*)malloc(sizeof(unit));printf("=>请输入新生姓名!\n");gets(p->);fflush(stdin);printf("=>请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q==NULL) n=1;while(q){if(q->date.number==m){printf("=>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head->next;break;}else{q=q->next;if(q==NULL) n=1;}}}p->date.number=m;printf("=>请输入性别!\n");gets(p->date.sex);fflush(stdin);printf("=>请输入数学成绩\n");scanf("%d",&m);fflush(stdin);p->date.math=m;printf("=>请输入英语成绩\n");scanf("%d",&m);fflush(stdin);p->date.eglish=m;printf("=>请输入c语言成绩\n");scanf("%d",&m);fflush(stdin);p->date.clanguge=m;p->date.average=(p->date.math+p->date.eglish+p->date.clanguge);q=head->next;head->next=p;p->next=q;head->date.number++;}void deletion(unit *head)//删除一名学生{unit *p=head->next,*q=head;char N[10];printf("=>请输入你想删除的学生姓名!\n");gets(N);fflush(stdin);if(p==NULL)printf("=>系统无学生可删除!\n");while(p){if(strcmp(p->,N)==0){q->next=p->next;head->date.number--;printf("=>删除%s成功!\n",p->);free(p);break;}else{p=p->next;q=q->next;if(p==NULL)printf("=>你要删除的学生不存在,删除失败!\n");}}}int display(unit *head)//显示学生信息{unit *p=head->next;int m,n=0;char N[10];if(p==NULL){printf("=>系统无学生!\n");return 0;}while(n==0){printf("********************************************************* *********************\n");printf("=>请选择你的操作!\n");printf("=>\t\t\t1.显示所有\t2.按姓名查找\n\t\t\t3.按学号查找\t4.返回主菜单\n");scanf("%d",&m);fflush(stdin);switch(m){case 1:printf("\n=>该系统拥有%d名学生!\n\n",head->date.number);p=head->next;printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n\n");while(p){printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);p=p->next;}break;case 2:printf("=>请输入查找姓名!\n");gets(N);fflush(stdin);p=head->next;while(p){if(strcmp(p->,N)==0){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!");}}break;case 3: printf("=>请输入查找学号!\n");scanf("%d",&m);fflush(stdin);p=head->next;while(p){if(p->date.number==m){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!\n");}}break;case 4:n=1;break;}}return 1;}int range(unit *head)//排序{unit *p=head,*q=head->next;int n,i,m=head->date.number;printf("********************************************************* **********************\n");printf("\t\t\t1.按学号\t2.按成绩\n\n");printf("=>请选择操作!\n》");scanf("%d",&n);fflush(stdin);if(q==NULL){ printf("=>无学生可排序!\n");return 0;}switch(n){case 2:for(i=0;i<m;i++)//按总分排序{p=head;q=head->next;while(q->next){if((q->date.average)<(q->next->date.average)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next;}}}break;case 1:for(i=0;i<=m;i++)//按学号排序{p=head;q=head->next;while(q->next){if((q->date.number)>(q->next->date.number)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next;}}}break;}printf("=>排序成功!\n");return 1;}void menu(){printf("\n********************************* 主菜单***************************************\n");printf("\t\t\t1.新建系统\t2.添加学生\n\t\t\t3.删除学生\t4.查看信息\n\t\t\t5.排列顺序\t6.读取信息\n\t\t\t7.保存信息\t8.退出系统\n");printf("=>请选择你的操作!\n");}int save(unit *head)//保存{FILE *fp;unit *p;p=head;if((fp=fopen("d:\\学生","wb+"))==NULL){printf("=>保存失败!");return 0;}while(p){fwrite(&(p->date),sizeof(student),1,fp);p=p->next;}printf("=>保存成功!");fclose(fp);return 1;}unit* read()//读入系统学生信息{int i;unit *p,*q,*head;FILE *fp;if((head=(unit*)malloc(sizeof(unit)))==NULL) { printf("=>开辟空间失败!");exit(1);}else{head->next=NULL;head->date.number=0;//头结点存放学生人数}q=head;if((fp=fopen("d:\\学生","rb"))==NULL){printf("=>系统无学生!\n");return 0;}fread(&(q->date),sizeof(student),1,fp);for(i=0;i<head->date.number;i++){if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>读值失败!");exit(1);}fread(&(p->date),sizeof(student),1,fp);p->next=q->next;q->next=p;}fclose(fp);return head;}void main(){int m=0,n, i;unit *head;printf("************************************************************* *******************\n\n");printf("\t\t\t* 欢迎使用学生成绩管理系统 * \n");printf("\n\t\t\t\t\t\t\t\t编译员:吹吹风\n\n");printf("=>正在读取系统信息......\n");if((head=read())==0){printf("=>是否新建?\n");printf("\t\t\t是(1)\t\t否(2)\n");scanf("%d",&i);fflush(stdin);if(i==1)head=build();else if(i==2)exit(1);}elseprintf("=>信息导入成功!");while(m==0){menu();scanf("%d",&n);fflush(stdin);switch(n){case 1: head=build();break;case 2:add(head);break;case 3:deletion(head);break;case 4:display(head);break;case 5: range(head);break;case 6:head=read();if(head!=0) printf("=>读取存盘成功!\n");break;case 7:save(head);break;case 8:m=1;break;}}}。

  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,dd.stu[i].na me,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,);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].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].cla s,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score[2],dd.stu[i].score[3],dd.stu[i].scor e[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].cla s,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score[2],dd.stu[i].score[3],dd.stu[i].scor e[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();}21。

相关文档
最新文档