VC课程设计学生成绩管理系统详解和源码

合集下载

学生成绩管理系统(详细操作过程)

学生成绩管理系统(详细操作过程)

学生成绩管理系统我将把我的实现步骤完整的写出来,我是在VC 6.0版本下用MFC实现的。

我创建的基于单文档的应用程序,过程不介绍,大家都会。

下面的是我系统菜单:思路:刚进入系统时,只有“登录”菜单可用,其他三个菜单项都是灰色不可用的。

当用户点“进入系统”菜单项时,用户输入用户名、密码和用户类型,系统将根据相应的用户权限使相应的菜单可用,并且“进入系统”菜单项变为不可用。

如:如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限”和“管理员权限”都不可用,同时“进入系统”变为不可用。

“学生权限”下只有“查询成绩”,因为学生只可以查询自己相应的成绩;“教师权限”下有“查询学生成绩”和“增改删学生成绩”两个菜单项,因为教师除了可以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限”下有“管理学生”和“管理教师”两个菜单项。

整体设计:因为我们要设置系统菜单的状态,所以必须在CMainFrame中添加相应的函数和代码,具体步骤如下:【步骤1】由于系统要使用ODBC类操作数据库,所以需要在stdafx.h中加入代码:#include <afxdb.h>【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可用,而“退出系统”和其他3个权限菜单都不可用,即都是灰色的。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){//使“退出系统”和其他3个权限菜单都不可用,即都是灰色的GetMenu()->GetSubMenu(0)-> EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()-> EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()-> EnableMenuItem(2,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()-> EnableMenuItem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);}【步骤3】在CMainFrame中添加自己定义的函数void SetMenuSta(int type),此函数在登陆对话框的OnOK()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。

C语言课程设计---班级成绩管理系统

C语言课程设计---班级成绩管理系统

课程设计报告课程名称C语言程序设计课题名称班级成绩管理系统专业班级学号姓名指导教师年月日湖南工程学院课程设计任务书课程名称C语言程序设计课题班级成绩管理系统专业班级学生姓名学号指导老师审批任务书下达日期年月日任务完成日期年月日目录一、引言 (1)二、总体设计 (2)三、详细设计 (4)四、问题分析及总结 (13)五、参考文献 (15)六、附件 (15)一、设计内容与设计要求1. 设计内容:班级成绩管理系统设计涉及的知识点:①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;②掌握数组的基本概念。

熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。

③掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。

④掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。

⑤掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。

2.设计要求:1)用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单。

2) 建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;3) 班级成绩管理系统应能提供以下功能:(1)主菜单界面设计。

通过提示用户输入一个数字选项,调用相应的功能函数。

(2)学生成绩显示:完成班级全部学生成绩的显示,显示时按表格的形式,且应有表头;(3)学生成绩追加:完成新增一个(或多个)学生的成绩记录,要求在追加过程中有相应的提示信息,完成追加后能重新计算学生平均成绩并显示;(4)学生成绩修改:要求能按学号和按姓名两种定位方式,且可以按用户要求修改记录中除学号和姓名以外的指定内容,并重新计算学生的平均成绩;(5)学生成绩信息的查询;要示系统能按学号、按姓名查询以及能查总分在某一指定范围内的学生信息,且能显示符合条件的所的记录,若所需查询的信息不存在时应有相应的提示信息。

C语言课程设计学生成绩管理系统源代码吉林大学

C语言课程设计学生成绩管理系统源代码吉林大学

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>typedef struct student{ /*定义结构体*/char IDNumber[16];/*学号*/char FamilyName[16]; /*姓*/char GivenName[16]; /*名*/int sex; /*性别(0代表“女”,1代表“男”)*/int BirthYear; /*出生年*/int BirthMonth; /*出生月*/int BirthDay; /*出生日*/float score[4]; /*成绩*/float sum; /*总分*/float average; /*平均分*/}stu;typedef struct Lnode{student data;Lnode *next;}st, *linklist;/***************************************************************************/ struct tm* ptm;float Sumstu(linklist L);float Averstu(linklist L);float Sumstu(linklist L){ /*计算总分*/linklist s;s=L;int i;s->data.sum=0;for(i=0;i<=4;i++){s->data.sum+=s->data.score[i];}return (s->data.sum);}float Averstu(linklist L){linklist q;q=L;Sumstu(q);q->data.average=q->data.sum/4;return (q->data.average);}void TimeNow() /*获取系统时间*/{struct tm* ptm;long ts;int y,m,d,h,n,s;ts = time(NULL);ptm = localtime(&ts);y = ptm-> tm_year+1900; //年m = ptm-> tm_mon+1; //月d = ptm-> tm_mday; //日h = ptm-> tm_hour; //时n = ptm-> tm_min; //分s = ptm-> tm_sec; //秒}int Menu() /*菜单函数*/{int n;printf("\t\t\t\n\n\n\n欢迎使用学生成绩管理系统\n\n\t\t\t按任意键进入系统!");system("pause");system("cls");printf("************************************************************************* *\n");printf("\n\t\t\t学生成绩管理系统\n\t\t\t\t制作人陈光林(52101407)\n");printf("-------------------------------菜单(Menu)---------------------------------\n");printf("\n\t 1. Enter list 输入记录\n");printf(" \t 2. Delete a record from list 删除记录\n");printf(" \t 3. Print list 显示所有记录\n");printf(" \t 4. Search record on name 按照姓名查找记录\n");printf(" \t 5. Save the file 保存记录到文件中\n");printf(" \t 6. Load the file 从文件中读入记录\n");printf(" \t 7. Compute the score 计算所有学生的总分和均分\n");printf(" \t 8. Query by class 按班级查询显示学生总分\n");printf(" \t 9. Insert record to list 插入记录到表中\n");printf(" \t 0. Quit 退出系统\n");printf("---------------------------------------------------------------------------\n");printf("************************************************************************* ***\n");do{printf("\n\t\t\t 请选择你需要的操作(0—9):");scanf("%d",&n);}while(n<1||n>5); /*如果选择项不在1—9之间则重输*/return(n); /*返回选择项*/}/***************************************************************************/linklist initlist(void) /*建立一个空链表*/{linklist L=(linklist)malloc(sizeof(st));L->next=NULL;return NULL;}/*建立学生信息链表*/st *creastlist(linklist L){int i;float s;linklist p;for(;;){p=(linklist)malloc(sizeof(st)); /*开辟新的节点*/if(!p){printf("\n Out of memory.");return (L);}printf("请输入学生学号");scanf("%s",p->data.IDNumber);if(p->data.IDNumber[0]=='0') break;printf("请输入姓:");scanf("%s",p->data.FamilyName);printf("请输入名:");scanf("%s",p->data.GivenName);printf("请输入性别(0女/1男):");scanf("%d",&p->data.sex);printf("请输入生日:");scanf("%d %d %d",&p->data.BirthYear, &p->data.BirthMonth,&p->data.BirthDay);printf("请输入成绩\n",4);s=0;for(i=0;i<4;i++){do{printf("score%d:",i+1);scanf("%f",&p->data.score[i]);if(p->data.score[i]<0 || p->data.score[i]>100)printf(" Data error,please enter again.\n");}while(p->data.score[i]<0 || p->data.score[i]>100);s=s+p->data.score[i];}p->data.sum=s;p->data.average=s/4;p->next=L;L=p;}return(L);}/****************************************************************************** *****************//*void creastlist(linklist L){st *p;linklist head=NULL;p=(linklist)malloc(sizeof(st));p=L;for(;;){printf("请输入学生学号:\n");scanf("%s",p->data.IDNumber);printf("请依次输入学生姓名:\n");scanf("%s%s",p->data.FamilyName,p->data.GivenName);printf("请输入出生年月日:\n");scanf("%d%d%d",p->data.BirthYear,p->data.BirthMonth,p->data.BirthDay);TimeNow();if(p->data.BirthYear>=ptm-> tm_year+1900){ printf("错误!学生年龄不能为负值!请重新输入!");continue;}else if(p->data.BirthMonth>=ptm-> tm_mon+1){printf("错误!学生年龄不能为负值!请重新输入!");continue;}else if(p->data.BirthDay>=ptm-> tm_mday){printf("错误!学生年龄不能为负值!请重新输入!");continue;}else{printf("请输入性别(0代表女,1代表男:\n");scanf("%d",p->data.sex);if(p->data.sex!=0||p->data.sex!=1) {printf("错误!学生年龄不能为负值!请重新输入!");continue;}else{printf("请分别输入外语、高数、C语言、马哲四门成绩:\n");scanf("%f%f%f%f",&p->data.score[0],&p->data.score[1],&p->data.score[2],&p->data.score[3]);p->next=head;head=p;}}}}*//*输出所有学生的信息*/void print(linklist head){linklist p;p=head;printf("************************************************************************* *");printf("| 学号| 姓名|性别|出生年月日|外语C语言高数马哲|总分|平均分|");printf("--------------------------------------------------------------------------");Sumstu(p);Averstu(p);while(p!=NULL){printf("%s%s%s%d%d%d%f%f%f%f%f%f",p->data.IDNumber,p->data.FamilyName,p->dat a.GivenName,p->data.sex,p->data.BirthYear,p->data.BirthMonth,p->data.BirthDay,p->data.score[0],p->data.score[1],p->data.score[2],p->data.score[3],p->data.sum,p->data.average) ;printf("\n");p=p->next;}printf("\n");}/****************************************************************************** **************/void insert(linklist L){ //插入新的结点linklist s,p=L;stu e;s=(linklist)malloc(sizeof(st));s->data=e; //头插法s->next=p->next;p->next=s;}/****************************************************************************** *************/void search(linklist L){int flag=1;char familyname[16];linklist p;printf("请输入要查询的学生姓名:\n");scanf("%s",familyname);p=L->next;while(p!=NULL){if(strcmp(familyname,p->data.FamilyName)==0){system("cls");Sumstu(p);Averstu(p);printf("************************************************************************* *");printf("| 学号| 姓名|性别|出生年月日|外语C语言高数马哲|总分|平均分|");printf("--------------------------------------------------------------------------");printf("%s%s%s%d%d%d%f%f%f%f%f%f",p->data.IDNumber,p->data.FamilyName,p->data.Gi venName,p->data.sex,p->data.BirthYear,p->data.BirthMonth,p->data.BirthDay,p->data.score[0],p->data.score[1],p->data.score[2],p->data.score[3],p->data.sum,p->data.average);printf("\n");flag=0;break;}elsep=p->next;}if(flag)printf("没有该学生信息或输入错误");Menu();}/****************************************************************************** *************************/void Delete(linklist L){linklist p,q;char num[16];int label=1;printf("请输入要删除的学生学号:\n");scanf("%s",num);p=L->next;q=L;do{if(strcmp(num,p->data.IDNumber)==0){system("cls");printf("\t发现要删除的学生信息,确认删除吗?\n");printf("\t\t确认(Y)取消(N)");getchar();if('y'||'Y'){q->next=p->next;delete p;printf("删除成功!");label=0;}else{exit(0);}}else{q=q->next;p=q->next;}} while(q->next!=NULL);if(label)printf("输入错误或者信息不存在!");}/****************************************************************************** ***************************/void Paixu(linklist L){linklist p;float s1=90,s2=80,s3=70,s4=60;p=L;int i;for(i=0;i<=4;i++){printf("****************************************************");printf("第%d科90分以上的学生:",i);if(p->data.score[i]>=s1){ printf("%s%s%s%f",p->data.IDNumber,p->data.FamilyName,p->data.GivenName, p->data.score[i]);}else{p=p->next;}if(s2<=p->data.score[i]<s1){ printf("%s%s%s%f",p->data.IDNumber,p->data.FamilyName,p->data.GivenName, p->data.score[i]);}else{p=p->next;}if(s3<=p->data.score[i]<s2){ printf("%s%s%s%f",p->data.IDNumber,p->data.FamilyName,p->data.GivenName, p->data.score[i]);}else{p=p->next;}if(s4<=p->data.score[i]<s3){ printf("%s%s%s%f",p->data.IDNumber,p->data.FamilyName,p->data.GivenName, p->data.score[i]);}else{p=p->next;}if(p->data.score[i]<s4){ printf("%s%s%s%f",p->data.IDNumber,p->data.FamilyName,p->data.GivenName, p->data.score[i]);}else{p=p->next;}}}/***************************************************************************************************//*void Query(linklist L){ //此处假设学号形式为20101407linklist p;p=L;char classs[2];float sumclass;printf("请输入您想查询的班级:\n");scanf("%s",classs);do{sumclass=p->data.score[0]+p->data.score[1]+p->data.score[2]+p->data.score[3] ;printf("%s%f",p->data.IDNumber,p->data.sum);}while((strcmp(classs[1],p->data.IDNumber[5])==0)&&(strcmp(classs[2],p->data.IDNu mber[6])==0));}/****************************************************************************** ********************/void ComputeProject(linklist L){linklist p;float sumall[4],averall[4];float Su=0,Av=0;//sumall[4]={0,0,0,0};averall[4]={0,0,0,0};int i,m=0;p=L;for(i=0;i<=4;i++){for(p=L;p->next!=NULL;p=p->next){m++;sumall[i]+=p->data.score[i];}averall[i]=sumall[i]/4;printf("第%d科的平均成绩是:\n",averall[i]);Su+=averall[i];}Av=Su/4;printf("总的平均成绩是:%f\n",Av);}/****************************************************************************** ******************/void compute(linklist L){linklist p;p=L;Sumstu(p);Averstu(p);do{printf("学号:%s\n",p->data.IDNumber);printf("总分:%f\n平均分:%f\n",p->data.sum,p->data.average);p=p->next;}while(p->next!=NULL);}/****************************************************************************** **************/void insert(linklist L, stu e){ //插入新的结点linklist s,p=L;printf("请输入要插入的学生信息:\n");scanf("%s%s%s%d%d%d%f%f%f%f%f%f",p->data.IDNumber,p->data.FamilyName,p->data.Gi venName,p->data.sex,p->data.BirthYear,p->data.BirthMonth,p->data.BirthDay,p->data.score[0],p->data.score[1],p->data.score[2],p->data.score[3],p->data.sum,p->data.average);s=(linklist)malloc(sizeof(st));s->data=e; //头插法s->next=p->next;p->next=s;}/****************************************************************************** *************/void save(linklist L){FILE *fp;linklist p; /* 定义移动指针*/char out];scanf("%s",outfile);if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/{printf("Cannot open the file\n");return; /*若打不开则返回菜单*/}p=L; /*移动指针从头指针开始*/while(p!=NULL) /*如p不为空*/{fwrite(p,sizeof(st),1,fp); /*写入一条记录*/p=p->next; /*指针后移*/}fclose(fp); /*关闭文件*/printf("Save the !\n");}/* 从文件读数据函数*/st *Load(linklist L){linklist p1,p2,head=NULL; /*定义记录指针变量*/FILE *fp; /* 定义指向文件的指针*/char in];scanf("%s",infile);if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/{printf("Can not open the file.\n");return(head);}printf("\nLoading the file!\n");p1=(linklist)malloc(sizeof(st)); /*开辟一个新单元*/if(!p1){printf("Out of memory!\n");return(head);}head=p1;while(!feof(fp)) /*循环读数据直到文件尾结束*/{if(fread(p1,sizeof(st),1,fp)!=1) break; /*如果没读到数据,跳出循环*/p1->next=(linklist)malloc(sizeof(st)); /*为下一个结点开辟空间*/if(!p1->next){printf("Out of memory!\n");return (head);}p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*指针后移,新读入数据链到当前表尾*/}p2->next=NULL; /*最后一个结点的后继指针为空*/fclose(fp);printf("\nYou have success to read data from the file!\n");return (L);}/****************************************************************************** **************//****************************************************************************** ***************/void main(){linklist head=initlist();for(;;){switch(Menu()){case 1 :creastlist(head);case 2 :Delete(head);case 3 :print(head);case 4 :search(head);case 5 :save(head);//case 6 :load(head);case 7 :compute(head);//case 8 : Query(head);case 9 :insert(head);case 0 :exit(0);}}}。

C语言课程设计 200行代码 -学生成绩查询系统.doc

C语言课程设计 200行代码 -学生成绩查询系统.doc

功能:查询修改统计成绩。

#include <stdio.h>struct student /*成绩表的结构声明*/{int num;char name[15];char sex;float WuLi;float ShuXue;float YingYu;float KuaiJi;float totle;};/*定义6个学生的信息:*/#define STU_NUMBER 6 /*宏定义学生数为6*/struct student Stu[STU_NUMBER]={{101,"yuchen", 'F', 98,85,96,89,0},{102,"xiaotong", 'F', 99,91,90,93,0},{103,"likanglong",'M', 76,83,74,82,0},{104,"yinger", 'F', 88,76,89,77,0},{105,"fengjiao", 'F', 97,100,94,96,0},{106,"sunyao", 'M', 87,89,66,84,0} };int SelectMainMenu(); /*显示并选择主菜单。

返回:被选择的菜单项*//*所有的函数声明:*/void Show(); /*成绩查询模块*/void Modify(); /*成绩修改模块*/void Stat(); /*成绩统计模块*/void StatAve(float *AveWuLi,float *AveShuXue,float *AveYingYu,float *AveKuaiJi);/*统计平均分*/int FindStudent(int num); /*根据学号查找某一学生*/void SetAllTotle(); /*计算所有学生总分*/void SetTotle(int No); /*计算第No个学生总分*/void ShowAllStudent(); /*显示所有成绩*/void ShowTitle(); /*显示表头信息*/void ShowStudent(int No); /*显示第No个的学生信息*/void main(){int isend=0,password=0; /*程序结束标志量,0表示不结束,1表示结束*/SetAllTotle(); /*计算所有学生总分*/while(password!=666){printf("qing shu ru mi ma:\n");scanf("%d",&password);}{switch(SelectMainMenu()) /*显示并选择主菜单*/{case 1: /*成绩查询*/Show(); /*调用成绩查询函数*/break;case 2: /*成绩修改*/Modify(); /*调用成绩修改函数*/break;case 3: /*成绩统计*/Stat(); /*调用成绩统计函数*/break;case 4: /*退出系统*/printf("\nxie xie nin de shi yong,zai jian!\n\n");isend = 1; /*设置程序结束标志*/break;}if(isend) break; /*程序结束*/}}int SelectMainMenu() /*显示并选择主菜单。

学生绩点计算系统C语言(附完整源代码)

学生绩点计算系统C语言(附完整源代码)

学生绩点计算系统C语言(附完整源代码)本文档提供了一个用于计算学生绩点的C语言程序的完整源代码。

程序简介该程序是一个学生绩点计算系统,它可以读取学生的课程成绩和学分信息,并计算出每门课程的绩点以及整个学期的绩点。

该程序可以帮助学生快速准确地计算自己的绩点,以便了解自己在学业上的表现。

源代码以下是该程序的完整源代码:include <stdio.h>int main() {int numCourses;float totalCredits = 0;float totalGradePoints = 0;printf("请输入您的课程数量:");scanf("%d", &numCourses);for (int i = 0; i < numCourses; i++) {int credits;float grade;printf("请输入第%d门课的学分:", i + 1); scanf("%d", &credits);printf("请输入第%d门课的成绩:", i + 1); scanf("%f", &grade);totalCredits += credits; totalGradePoints += credits * grade;}float gpa = totalGradePoints / totalCredits;printf("\n您的绩点为:%.2f\n", gpa);return 0;}该程序首先会要求用户输入课程数量,然后逐一询问每门课程的学分和成绩。

程序会根据用户输入的数据计算出总学分和总绩点,并最终计算出绩点(GPA),并将结果输出。

使用方法1. 运行该程序;2. 按照提示输入课程数量;3. 按照提示逐一输入每门课程的学分和成绩;4. 程序将会输出您的绩点(GPA)。

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语言的学生成绩管理系统源码

学生成绩管理系统本系统是在C语言下实现的学生成绩管理,是一个简单的课程设计,但是功能齐全,增减删除,指针排序等等,是基础学习的一个好实践材料.全部代码2000多行.共26页.主要实现功能如下:一、学生菜单1、查看个人成绩2、按学号排序查看班级成绩3、按学生总成绩排序查看成绩4、查看不及格学生的成绩5、给管理员留言6、更改登录密码二、管理员菜单1、按班级查询学生信息2、按姓名查询学生信息3、按学号查询学生信息4、插入学生信息删除学生信息5、更改学生信息6、添加班级信息7、查看学生留言8、更改登录密码#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <conio.h>#include <string.h>static int newcount=0;char obj[4][10]={"英语","数理","语言","微分"};struct student{long num;char classes[20];char name[20];char sex[2];long birthday;float score[4];float total;struct student *next;};struct student *create(int n) /*手动插入班级文件*/{struct student *head=NULL,*p1,*p2;int i,j;for(i=1;i<=n;i++){float total=0;p1=(struct student *)malloc(sizeof(struct student));printf("请输入第%d个学生的:\n",i);printf("学号:");scanf("%ld",&p1->num);printf("班级:");scanf("%s",p1->classes);printf("姓名:");scanf("%s",p1->name);printf("性别:");scanf("%s",p1->sex);printf("生日:");scanf("%ld",&p1->birthday);for(j=0;j<4;j++){printf("%s分数:",obj[j]);scanf("%f",&p1->score[j]);total=total+(p1->score[j]);}p1->total=total;p1->next=NULL;if(i==1)head=p1;elsep2->next=p1;p2=p1;}return(head);}void clrscr() //空行{int t;for(t=0;t<=40;t++)printf("\n");}void print(struct student *head) //显示文件{struct student *p=head;printf("学号\t 班级\t姓名\t性别\t生日\t英语语言数理微分总分\n\n");while(p!=NULL&&p->total!=0){printf("%-10ld%5s\t%-7s\t%s %-8ld %.1f %.1f %.1f %.1f %.1f\n\n",p->num,p-> classes,p->name,p->sex,p->birthday,p->score[0],p->score[1],p->score[2],p->score[3],p->total);p=p->next;}}struct student *save(struct student *head,char *inputclasses) //存入班级文件{FILE *fp;struct student *p;p=head;fp=fopen(inputclasses,"ab");while(p!=NULL){fwrite(p,sizeof(struct student),1,fp);p=p->next;}fclose(fp);}struct student *load(char *inputclasses) //读取班级文件{FILE *fp;int j=1;struct student *head,*p1,*p2;fp=fopen(inputclasses,"rb");p1=(struct student *)malloc(sizeof(struct student));while(!feof(fp)){fread(p1,sizeof(struct student),1,fp);p1->next=(struct student *)malloc(sizeof(struct student));if(j==1)head=p1;p2=p1;p1=p1->next;j++;}return(head);fclose(fp);}int mainmenu() //主目录{int m;printf("\t\t*********************************************\n");printf("\n");printf("\t\t\t\t学生成绩管理系统\n");printf("\n");printf("\t\t\t\t 主菜单\n");printf("\n");printf("\t\t*********************************************\n");printf("\n");printf("\t\t\t\t(1)、管理员模式!\n");printf("\n");printf("\t\t\t\t(2)、学生模式!\n");printf("\n");printf("\t\t\t\t(3)、退出!\n");printf("\n");printf("\t\t*********************************************\n");printf("\t\t\t请选择1、2、3,您的选择是:");scanf("%d",&m);printf("\n");return m;}int studentmenu() //学生菜单{int k;printf("\t\t*********************************************\n");printf("\n");printf("\t\t\t\t学生成绩管理系统\n");printf("\n");printf("\t\t\t\t 学生菜单\n");printf("\n");printf("\t\t\t\t(1)、查看个人成绩\n");printf("\n");printf("\t\t\t\t(2)、按学号排序查看班级成绩\n");printf("\n");printf("\t\t\t\t(3)、按学生总成绩排序查看成绩\n");printf("\n");printf("\t\t\t\t(4)、查看不及格学生的成绩\n");printf("\n");printf("\t\t\t\t(5)、给管理员留言\n");printf("\n");printf("\t\t\t\t(6)、更改登录密码\n");printf("\n");printf("\t\t\t\t(7)、退回到主菜单\n");printf("\n");printf("\t\t\t\t(8)、退出\n");printf("\n");printf("\t\t*********************************************\n");printf("\t\t你的选择是:");scanf("%d",&k);return k;}int adminmenu() //管理员菜单{int k;printf("\t*****************************************************************\n");printf("\n\n");printf("\t\t\t\t学生成绩管理系统\n");printf("\n");printf("\t\t\t\t 管理员菜单\n");printf("\n\n");printf("\t(1)、按班级查询学生信息\t\t(2)、按姓名查询学生信息");printf("\n\n");printf("\t(3)、按学号查询学生信息\t\t(4)、插入学生信息");printf("\n\n");printf("\t(5)、删除学生信息\t\t(6)、更改学生信息");printf("\n\n");printf("\t(7)、添加班级信息\t\t(8)、查看学生留言");printf("\n\n");printf("\t(9)、更改登录密码\t\t(10)、退回到主菜单");printf("\n\n");printf("\t(11)、退出");printf("\n\n");printf("\t******************************************************************\n");printf("\t\t\t\t你的选择是:");scanf("%d",&k);return k;}int checkcode(int n,char *inputname,char *inputcode) //密码验证{FILE *fp;int i;char code[20],code2[20],name[20];if(n==1){fp=fopen("admincode.txt","r");if(fp==NULL){printf("\n\t\t*********************************************");printf("\n");printf("\t\t\t密码还没有设置,请设置密码!\n\n");codesign: printf("\n请设置登录名:");scanf("%s",name);printf("\n\t\t*********************************************");printf("\n\t\t\t请设置登录密码:");scanf("%s",code);printf("\n\t\t*********************************************");printf("\n\t\t\t请再次输入密码:");scanf("%s",code2);fp=fopen("admincode.txt","w");if(strcmp(code,code2)==0){fprintf(fp,"%s\n",name);fprintf(fp,"%s",code);}else{printf("\t\t\t两次密码不一致,请再输入一次!\n\n");goto codesign;}fclose(fp);return 1;}else{fscanf(fp,"%s\n",name);fscanf(fp,"%s",code);if(strcmp(name,inputname)==0&&strcmp(code,inputcode)==0)return 1;else return 0;fclose(fp);}}if(n==2){fp=fopen("stucode.txt","rw");if(fp==NULL){printf("\n\t\t*********************************************");printf("\n");printf("\t\t\t密码还没有设置,请设置密码!\n\n");codesign2: printf("\n请设置登录名:");scanf("%s",name);printf("\n\t\t*********************************************");printf("\n\t\t\t请设置登录密码:");scanf("%s",code);printf("\n\t\t*********************************************");printf("\n\t\t\t请再次输入密码:");scanf("%s",code2);fp=fopen("stucode.txt","w");if(strcmp(code,code2)==0){fprintf(fp,"%s\n",name);fprintf(fp,"%s",code);}else{printf("\t\t\t两次密码不一致,请再输入一次!\n\n");goto codesign2;}fclose(fp);return 1;}else{fscanf(fp,"%s",name);fscanf(fp,"%s",code);if(strcmp(name,inputname)==0&&strcmp(code,inputcode)==0)return 1;else return 0;fclose(fp);}}}void classescheck() //查看班级情况{struct student *head;char inclasses[20],*inputclasses;printf("\t*****************************************************************\n");printf("\n\t\t\t请输入你要查询的班级:");scanf("%s",inclasses);printf("\t*****************************************************************\n");if(checkclasses(inclasses)){inputclasses=strcat(inclasses,".txt");head=load(inputclasses);print(head);}else printf("\n\t\t\t你输入的班级不存在,任意键继续!");}void printp(struct student *p) //显示符合条件的个人信息{printf("\t\t**************************************************************\n");printf("学号\t 班级\t姓名\t性别\t生日\t英语语言数理微分总分\n\n");printf("%-12ld%5s\t%-7s\t%s %-8ld %.1f %.1f %.1f %.1f %.1f\n",p->num,p->classes, p->name,p->sex,p->birthday,p->score[0],p->score[1],p->score[2],p->score[3],p->total);}int checkclasses(char *inputclasses) //检查班级的存在{FILE *fp;int i=0,j;int sign=0;char classes[100][20];fp=fopen("classes.txt","r");while(!feof(fp)){fscanf(fp,"%s",classes[i]);i++;}for(j=0;j<i;j++)if(strcmp(classes[j],inputclasses)==0)sign=1;return sign;}void namecheck() //按姓名查看{char inputname[20],*name,inputclasses[20];struct student *head,*p1,*p2;printf("\t\t*********************************************\n");printf("\t\t\t 请输入该同学的班级:");scanf("%s",inputclasses);if(checkclasses(inputclasses)){name=strcat(inputclasses,".txt");head=load(name);printf("\n\t\t\t 请输入学生姓名:");scanf("%s",inputname);p1=head;while(strcmp(p1->name,inputname)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->name,inputname)==0)printp(p1);else{printf("\t\t**************************************************\n");printf("\t\t\t不存在这个同学!");}}else{printf("\t\t*********************************************\n");printf("\t\t\t请确认所在班级!\n");}}void numcheck() //按学号查看{char *name,inputclasses[20];long inputnum;struct student *head,*p1,*p2;printf("\t\t*********************************************\n");printf("\t\t\t 请输入该同学的班级:");scanf("%s",inputclasses);if(checkclasses(inputclasses)){name=strcat(inputclasses,".txt");head=load(name);printf("\n\t\t\t 请输入学生姓名:");scanf("%ld",&inputnum);p1=head;while(p1->num!=inputnum&&p1->next!=NULL){p2=p1;p1=p1->next;}if(p1->num==inputnum){printp(p1);}else{printf("\t\t**************************************************\n");printf("\t\t\t不存在这个学号!");}}else{printf("\t\t*********************************************\n");printf("\t\t\t请确认所在班级!\n");}}void addclasses() //添加班级{struct student *head;FILE *fp1,*fp2;int n;char addclasses[20],*addclasses2;printf("\n************************************************************\n");printf("\t\t\t请输入你要加入的班级:");scanf("%s",addclasses);if(checkclasses(addclasses)){printf("\n************************************************************\n");printf("你输入的班级已经存在!");printf("\n************************************************************\n");}else{printf("\n\t\t************************************************************\n");printf("请输入班级人数:");scanf("%d",&n);fp1=fopen("classes.txt","a");fprintf(fp1,"%s\n",addclasses);fclose(fp1);head=create(n);addclasses2=strcat(addclasses,".txt");save(head,addclasses);printf("\n\t\t************************************************************\n");printf("以下是你加入的信息:\n");head=load(addclasses);print(head);printf("\n\t\t************************************************************\n"); }}int classesnum(struct student *head,long n) //检查学号是否存在{struct student *p1,*p2;int sign=0;p1=head;while(p1->next!=NULL&&p1->num!=n){p2=p1;p1=p1->next;}if(p1->num==n)sign=1;return sign;}void modifynews() //更改学生信息{struct student *head,*p1,*p2,*p;char inputclasses[20];char modifyclasses[20],modifyname[20];char *classes;long inputnum;int j;float total=0;p=(struct student *)malloc(sizeof(struct student));clrscr();printf("\t*****************************************************************\n");printf("\t\t\t请输入你要修改的学生的班级:");scanf("%s",inputclasses);if(checkclasses(inputclasses)){classes=strcat(inputclasses,".txt");head=load(classes);printf("\n\n\t\t\t请输入要修改学生的学号:");scanf("%ld",&inputnum);if(classesnum(head,inputnum)==0){printf("\t\t\t该学生并不存在不能修改!");}else{clrscr();printf("\t************************************************************");p1=head;while(p1->num!=inputnum){p2=p1;p1=p1->next;}printp(p1);printf("\n\n\n\t\t\t请修改学号为%ld的学生的信息:\n",inputnum);p->num=inputnum;printf("\n\t\t\t班级:");scanf("%s",p->classes);printf("\n\t\t\t姓名:");scanf("%s",p->name);printf("\n\t\t\t性别:");scanf("%s",p->sex);printf("\n\t\t\t生日:");scanf("%ld",&p->birthday);for(j=0;j<4;j++){printf("\n\t\t\t%s分数:",obj[j]);scanf("%f",&p->score[j]);total=total+(p->score[j]);}p->total=total;if(p1==head){p->next=head->next;head=p;}else if(p1->next==NULL){p2->next=p;p->next=NULL;}else{p2->next=p;p->next=p1->next;}save(head,classes);print(head);}}}void insert() //插入学生信息{struct student *head,*p1,*p2,*p;char inputclasses[20];char insertclasses[20],insertname[20];char *classes;long inputnum;int j;float total=0;p=(struct student *)malloc(sizeof(struct student));clrscr();printf("\t*****************************************************************\n");printf("\t\t\t请输入你要插入的学生的班级:");scanf("%s",inputclasses);if(checkclasses(inputclasses)){classes=strcat(inputclasses,".txt");head=load(classes);printf("\n\n\t\t\t请输入要插入学生的学号:");scanf("%ld",&inputnum);if(classesnum(head,inputnum)==1){printf("\t\t\t该学生已经存在!");}else{printf("\t********************************************************\n\n");p1=head;while(p1->num<inputnum&&p1->next!=NULL&&p1->total!=0){p2=p1;p1=p1->next;}printp(p1);printf("\n\n\n\t\t\t请插入学号为%ld的学生的信息:\n",inputnum);p->num=inputnum;printf("\n\t\t\t班级:");scanf("%s",p->classes);printf("\n\t\t\t姓名:");scanf("%s",p->name);printf("\n\t\t\t性别:");scanf("%s",p->sex);printf("\n\t\t\t生日:");scanf("%ld",&p->birthday);for(j=0;j<4;j++){printf("\n\t\t\t%s分数:",obj[j]);scanf("%f",&p->score[j]);total=total+(p->score[j]);}p->total=total;if(inputnum<head->num){p->next=head->next;head=p;}else if(p1->next==NULL){p1->next=p;p->next=NULL;}else{p2->next=p;p->next=p1;}save(head,classes);print(head);}}}int classesname(struct student *head,char *inputname) //检查学生姓名是否存在{struct student *p1,*p2;int sign=0;p1=head;while(p1->next!=NULL&&strcmp(p1->name,inputname)!=0){p2=p1;p1=p1->next;}if(strcmp(p1->name,inputname)==0)sign=1;return sign;}void delet() //删除信息{struct student *head,*p1,*p2;char inputclasses[20],*classes;long inputnum;char inputname[20];printf("\n\t\t*********************************************************\n");printf("\t\t\t请输入要删除的学生的班级:");scanf("%s",inputclasses);if(checkclasses(inputclasses)){printf("\n\n\t\t\t请输入要删除学生的学号:");scanf("%ld",&inputnum);printf("\n\n\t\t\t请输入要删除学生的姓名:");scanf("%s",inputname);classes=strcat(inputclasses,".txt");head=load(classes);if(classesnum(head,inputnum)&&classesname(head,inputname)){p1=head;while(p1->num!=inputnum&&strcmp(p1->name,inputname)!=0){p2=p1;p1=p1->next;}if(p1->num==inputnum&&strcmp(p1->name,inputname)==0){p2->next=p1->next;save(head,classes);print(head);}}else{printf("\n\n\t\t****************************************************");printf("\n\n\t\t\t你输入的学生不存在");}}else{printf("\n\n\t\t****************************************************");printf("你输入的班级不存在");}}void newsckeck() //查看留言{FILE *fp1,*fp2;int i=1,j=0,t=1;char news[10][200],name[50][20],num1[2],*num2;fp1=fopen("留言.txt","rw");while(!feof(fp1)){fscanf(fp1,"%s",name[t]);t++;}for(i=1;i<t-1;i++){fscanf(fp1,"%s",name[i]);printf("\n\n\t\t\t第%d为学生:",i);puts(name[i]);}fclose(fp1);i--;while(i>0){printf("\n\n\t\t\t请输入编号查看留言:");scanf("%s",num1);printf("\n\n\t\t\t编号为%s的留言内容是:\n");num2=strcat(num1,".txt");fp2=fopen(num2,"r");while(fgets(news[j],200,fp2)!=NULL){puts(news[j]);}i--;}printf("\n\n\t\t************************************");printf("\n\n\t\t\t你暂时没有留言!!!!!\n\n");fp1=fopen("留言.txt","w");fclose(fp1);}void sentnews() //给管理员留言{FILE *fp1,*fp2;static int j=0;char inputnews[200],inputname[20];char name[3],*name2;printf("\n\n\t\t***********************************************");printf("\n\n\t\t\t输入你的姓名:");scanf("%s",inputname);fp1=fopen("留言.txt","a");fprintf(fp1,"%s\n",inputname);newcount=newcount+1;j++;fclose(fp1);itoa(j,name,10);name2=strcat(name,".txt");printf("\n\n\t\t\t请输入你的留言:\n\n\n");scanf("%s",inputnews);fp2=fopen(name2,"w");fputs(inputnews,fp2);fclose(fp2);printf("\n\n\n\t\t************************************************");printf("\n\n\t\t\t\t留言成功!!!!!!!!");}void admodifycode() //管理员修改密码{char inputname[20],code[20],mdname[20],mdcode[20],mdcode2[20];FILE *fp;printf("\n\n\t\t\t请输入你用户名:");scanf("%s",inputname);printf("\n\n\t\t\t请输入你的密码:");scanf("%s",code);if(checkcode(1,inputname,code)){fp=fopen("admincode.txt","w");printf("\n\t\t*********************************************");codesign3: printf("\n\t\t\t请设置登录名:");scanf("%s",mdname);printf("\n\t\t*********************************************");printf("\n\t\t\t请设置登录密码:");scanf("%s",mdcode);printf("\n\t\t*********************************************");printf("\n\t\t\t请再次输入密码:");scanf("%s",mdcode2);fp=fopen("admincode.txt","w");if(strcmp(mdcode,mdcode2)==0){fprintf(fp,"%s\n",mdname);fprintf(fp,"%s",mdcode);}else{printf("\t\t\t两次密码不一致,请再输入一次!\n\n");goto codesign3;}fclose(fp);}else{printf("\n\t\t*****************************************************");printf("\n\n\t\t\t密码错误!!!!!!!!!!!");}}void stumodifycode(){char inputname[20],code[20],mdname[20],mdcode[20],mdcode2[20];FILE *fp;printf("\n\n\t\t\t请输入你用户名:");scanf("%s",inputname);printf("\n\n\t\t\t请输入你的密码:");scanf("%s",code);if(checkcode(2,inputname,code)){fp=fopen("stucode.txt","w");printf("\n\t\t*********************************************");codesign4: printf("\n\t\t\t请设置登录名:");scanf("%s",mdname);printf("\n\t\t*********************************************");printf("\n\t\t\t请设置登录密码:");scanf("%s",mdcode);printf("\n\t\t*********************************************");printf("\n\t\t\t请再次输入密码:");scanf("%s",mdcode2);fp=fopen("stucode.txt","w");if(strcmp(mdcode,mdcode2)==0){fprintf(fp,"%s\n",mdname);fprintf(fp,"%s",mdcode);}else{printf("\t\t\t两次密码不一致,请再输入一次!\n\n");goto codesign4;}fclose(fp);}else{printf("\n\t\t*****************************************************");printf("\n\n\t\t\t密码错误!!!!!!!!!!!");}}void sstudent(){struct student *head,*p1,*p2;char inputclasses[20],*inputclasses2,inputname[20];long inputnum;printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t请输入你的班级:");scanf("%s",inputclasses);if(checkclasses(inputclasses)){inputclasses2=strcat(inputclasses,".txt");head=load(inputclasses2);p1=head;printf("\n\n\t\t\t请输入你的学号:");scanf("%ld",&inputnum);printf("\n\n\t\t\t请输入你的姓名:");scanf("%s",inputname);if(classesnum(head,inputnum)&&classesname(head,inputname)){while(p1->num!=inputnum&&strcmp(p1->name,inputname)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(p1->num==inputnum&&strcmp(p1->name,inputname)==0)printp(p1);}else{printf("\n\n\t\t**************************************************");printf("\n\n\t\t你输入学生不存在!!!!!!!!!!!!");}}else{printf("\n\n\t\t**************************************************");printf("\n\n\t\t你输入的班级不存在!!!!!!!!!!!!");}}void badstudent(){struct student *head,*p1,*p2,*p3,*p4,*p5;char inputclasses[20],*inputclasses2;printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t请输入你的班级:");scanf("%s",inputclasses);printf("\n\n\t\t***************************************************\n");if(checkclasses(inputclasses)){inputclasses2=strcat(inputclasses,".txt");head=load(inputclasses2);p1=head;p3=head;p4=head;p5=head;print(head);printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t英语不及格的同学情况:");printf("\n\n\t\t\t姓名\t分数");while(p1->next!=NULL&&p1->total!=0){p2=p1;p1=p1->next;if(p1->score[0]<60)printf("\n\n\t\t\t%s\t%.1f",p1->name,p1->score[0]);}printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t数理不及格的同学情况:");printf("\n\n\t\t\t姓名\t分数");while(p3->next!=NULL&&p3->total!=0){p2=p3;p3=p3->next;if(p3->score[1]<60)printf("\n\n\t\t\t%s\t%.1f",p3->name,p3->score[1]);}printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t语言不及格的同学情况:");printf("\n\n\t\t\t姓名\t分数");while(p4->next!=NULL&&p4->total!=0){p2=p4;p4=p4->next;if(p4->score[2]<60)printf("\n\n\t\t\t%s\t%.1f",p4->name,p4->score[2]);}printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t微分不及格的同学情况:");printf("\n\n\t\t\t姓名\t分数");while(p5->next!=NULL&&p5->total!=0){p2=p5;p5=p5->next;if(p5->score[3]<60)printf("\n\n\t\t\t%s\t%.1f",p5->name,p5->score[3]);}}}void sortstudent(){FILE *fp;struct student *head,*p1,*p2,*p3,stu[100];int i=0,j,k,t;char inputclasses[20],*inputclasses2;printf("\n\n\t\t***************************************************");printf("\n\n\t\t\t请输入你的班级:");scanf("%s",inputclasses);printf("\n\n\t\t***************************************************\n");if(checkclasses(inputclasses)){inputclasses2=strcat(inputclasses,".txt");head=load(inputclasses2);p1=head;print(head);while(p1->next!=NULL&&p1->total!=0){p2=p1;p1=p1->next;i++;}p1=head;p2=head;for(j=0;j<i;j++){for(k=0;k<i-1;k++){t=k;while(t>0){p3=p2;p2=p2->next;t--;}t=k+1;while(t>0){p1=p2->next;t--;}if(p2->total<p1->total){if(p1==head){head=p1;p2->next=head->next;head->next=p2;}else{p3->next=p1;p2->next=p1->next;p1->next=p2;}}p2=head;p1=head;}p2=head;p1=head;}}print(head);int admcode(){FILE *fp;char inputname[20], inputcode[20],c;int flag=0,j;char code[20],code2[20],name[20];printf("\t\t*********************************************\n");printf("\n");printf("\t\t\t 请输入你的用户名:");scanf("%s",inputname);printf("\n\t\t*********************************************\n");printf("\n\n");printf("\t\t\t 请输入密码:");c=getch();if(c!='\r')printf("*");while(c!='\r'){ inputcode[j++]=c;c=getch();if(c!='\r')printf("*");else inputcode[j]='\0';}printf("\n");fp=fopen("admincode.txt","r");fscanf(fp,"%s\n",name);fscanf(fp,"%s",code);fclose(fp);if(strcmp(name,inputname)==0&&strcmp(code,inputcode)==0)flag=1;return flag;}int stucode(){FILE *fp;char inputname[20], inputcode[20],c;int flag=0,j;char code[20],code2[20],name[20];printf("\t\t*********************************************\n");printf("\n");printf("\t\t\t 请输入你的用户名:");scanf("%s",inputname);printf("\n\t\t*********************************************\n");printf("\n\n");printf("\t\t\t 请输入密码:");c=getch();if(c!='\r')printf("*");while(c!='\r'){ inputcode[j++]=c;c=getch();if(c!='\r')printf("*");else inputcode[j]='\0';}printf("\n");fp=fopen("stucode.txt","r");fscanf(fp,"%s\n",name);fscanf(fp,"%s",code);fclose(fp);if(strcmp(name,inputname)==0&&strcmp(code,inputcode)==0)flag=1;return flag;}int main(){struct student *head;int maininput,sign,j=0;mainlabe:while(1){maininput=mainmenu();switch(maininput){case 1:{sign=admcode();if(sign==1){while(1)。

学生成绩管理系统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。

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

VC++课程设计设计项目:学生成绩管理系统设计者:张守阳(20102973)班级:计本10级二班使用软件: VC++6.0使用数据库: ACCESS设计流程一、设计理念开发一款学生成绩管理程序,实现学生基本信息的录入、查询及浏览和修改操作。

以及学生成绩的录入、查询、浏览以及统计分析等功能。

以上功能以可视化界面方式进行操作,并将学生成绩信息保存。

二、数据库设计在这个程序中,所用到的数据库是ACCESS数据库。

在数据库中,添加了8个表,分别是NO1OBJECT、NO1STUDENT、NO1STUINFO、NO1TEACHER、NO2OBJECT、NO2STUDENT、NO2STUINFO、NO2TEACHER.这8个表分别记录着两个班的:成绩概况、学生成绩、学生信息、教师信息。

三、程序设计此成绩管理系统共有两个模块:一个是学生成绩管理模块,一个是学生信息管理模块。

在登录成功后(登录用户名和密码都是:admin)会出现主窗口。

在主窗口中可以通过单击两个模块的按钮实现来实现两个模块间的切换。

学生成绩模块所实现的功能是:根据班级选项显示学上成绩信息,并且实现成绩的添加、修改、删除、查询功能。

学生信息模块能够实现学生信息的显示、添加、修改和删除功能。

四、此程序的介绍此程序是基于对话框的MFC程序。

所有的弹出式对话框是模态对话框,由于用到的对话框较多,所以定义的类较多,看起来有点眼花缭乱。

由于我对MFC掌握程度有限,这个程序做的有点粗糙,既不美观,在功能上也有许多不尽人意的地方,或许还会存在bug。

五、程序的实现1)、修改APP类由于此程序用到数据库,所以需要先连接数据源。

此程序通过采用代码来连接到所设计的数据源。

首先将设计的数据库复制到工程所在根目录下,再在APP中的initInstance()函数中添加如下代码:///////加载数据源if (!AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;}CString sPath;GetModule(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer ();int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);nPos=sPath.ReverseFind('\\');sPath=sPath.Left (nPos);CString lpszFile = sPath + "\\mydb.mdb";char* szDesc;int mlen;szDesc=new char[256];sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s?FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","mydb",lpsz);mlen = strlen(szDesc);for (int i=0; i<mlen; i++){if (szDesc[i] == '?')szDesc[i] = '\0';}if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))AfxMessageBox("SQLConfigDataSource Failed");try{CString strConnect;strConnect.Format("DSN=mydb;");if(!m_DB.OpenEx(strConnect,CDatabase::useCursorLib)){AfxMessageBox("Unable to Connect to the Specified Data Source");return FALSE ;}}catch(CDBException *pE){pE->ReportError();pE->Delete();return FALSE;}//////////////////////////////其中m_DB是定义的一个CDatabase 对象,用来指向数据库mymdb。

2)、新建CRecordset 数据集类在项目中,共有四个数据集类,分别是CDRecordset、 CBRecordset、 CTRecordset、CSinfoRecordset。

它们分别对应学生成绩表、成绩概况表、教师表和学生信息表。

3)、学生成绩模块的代码BOOL CBaDialog::OnInitDialog(){CDialog::OnInitDialog();CDRecordset m_Set(&theApp.m_DB);CBRecordset m_bSet(&theApp.m_DB);CTRecordset m_tSet(&theApp.m_DB);//////////初始化列表控件ListCtrlxunsigned i=0;CODBCFieldInfo Info;m_Set.Open();m_ListCtrlx.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);for( i=0;i<m_Set.m_nFields;i++){m_Set.GetODBCFieldInfo(i,Info);m_ListCtrlx.InsertColumn(i,Info.m_strName,LVCFMT_LEFT,80);}m_Set.Close();//////////初始化列表控件ListCtrlbm_bSet.Open();m_ListCtrlb.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);for( i=0;i<m_bSet.m_nFields;i++){m_bSet.GetODBCFieldInfo(i,Info);m_ListCtrlb.InsertColumn(i,Info.m_strName,LVCFMT_LEFT,80);}m_bSet.Close();/////////////////////////////////////////////////初始化列表控件ListCtrllm_ListCtrll.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_ListCtrll.InsertColumn(0,_T("科目"),LVCFMT_IMAGE|LVCFMT_LEFT);m_ListCtrll.InsertColumn(1,"任课老师");for(i=0;i<2;i++)m_ListCtrll.SetColumnWidth(i,80);m_cob.SetCurSel(1);this->Enable(FALSE);m_Timer=SetTimer(1,2,NULL);m_bIsAsc=TRUE;m_bS=TRUE;return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }void CBaDialog::OnStatr(){// TODO: Add your control notification handler code herem_ListCtrlx.DeleteAllItems();m_ListCtrlb.DeleteAllItems();m_ListCtrll.DeleteAllItems();if(m_Set.IsOpen())m_Set.Close();if(m_bSet.IsOpen())m_bSet.Close();m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring);this->Select();if(m_Getstring=="计本一班")m_tSet.Open();if(m_Getstring=="计本二班")m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2TECHER]");m_nRecordCount=this->Show(); //初始化“学生成绩详单”,并返回字段数 this->display(); //初始化“各科成绩概况”this->exhibit(); //将teacher表中的记录加载到“任课教师” m_bS = GetDlgItem(IDC_STATR)->EnableWindow(true);this->Enable(TRUE);}int CBaDialog::Show(){int i=0;m_Set.MoveFirst();do{CString s;s.Format("%d",m_Set.m_column1);m_ListCtrlx.InsertItem(i,s,0);m_ListCtrlx.SetItemText(i,1,m_Set.m_column2);s.Format("%.1f",m_Set.m_column3);m_ListCtrlx.SetItemText(i,2,s);s.Format("%.1f",m_Set.m_column4);m_ListCtrlx.SetItemText(i,3,s);s.Format("%.1f",m_Set.m_column5);m_ListCtrlx.SetItemText(i,4,s);s.Format("%.1f",m_Set.m_column6);m_ListCtrlx.SetItemText(i,5,s);s.Format("%.1f",m_Set.m_column7);m_ListCtrlx.SetItemText(i,6,s);s.Format("%.1f",m_Set.m_column8);m_ListCtrlx.SetItemText(i,7,s);s.Format("%.2f",m_Set.m_column9);m_ListCtrlx.SetItemText(i,8,s);i++;m_Set.MoveNext();} while(!m_Set.IsEOF());m_Set.Close();return i;}void CBaDialog::display(){int i=0;m_bSet.MoveFirst();do{CString s;m_ListCtrlb.InsertItem(i,m_bSet.m_column1,0);s.Format("%.1f",m_bSet.m_column2);m_ListCtrlb.SetItemText(i,1,s);s.Format("%.2f",m_bSet.m_column3);m_ListCtrlb.SetItemText(i,2,s);s.Format("%d",m_bSet.m_column4);m_ListCtrlb.SetItemText(i,3,s);s.Format("%d",m_bSet.m_column5);m_ListCtrlb.SetItemText(i,4,s);i++;m_bSet.MoveNext();} while(!m_bSet.IsEOF());m_bSet.Close();}void CBaDialog::exhibit(){int i=0;do{m_ListCtrll.InsertItem(i,m_tSet.m_column1,0);m_ListCtrll.SetItemText(i,1,m_tSet.m_column2);i++;m_tSet.MoveNext();}while(!m_tSet.IsEOF());m_tSet.Close();}void CBaDialog::Enable( BOOL p){BOOL HB;HB=p;GetDlgItem(IDC_ADD)->EnableWindow(HB);GetDlgItem(IDC_DELECT)->EnableWindow(HB);GetDlgItem(IDC_EDIT)->EnableWindow(HB);GetDlgItem(IDC_FIND)->EnableWindow(HB);GetDlgItem(IDC_ALL)->EnableWindow(HB);}CString CBaDialog::Select() //班级的选择{if(m_Getstring=="计本一班"){m_Set.Open();m_bSet.Open();}else{m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUDENT]");m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2OBJECT]");}return m_Getstring;}void CBaDialog::Equal(){for(int i=0;i<5;i++){float p=0;if(i==0)p=m_Set.m_column3;if(i==1)p=m_Set.m_column4;if(i==2)p=m_Set.m_column5;if(i==3)p=m_Set.m_column6;if(i==4)p=m_Set.m_column7;m_bSet.Edit();if(Selec==FALSE){m_bSet.m_column2-=p;m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount);if(p>=60)m_bSet.m_column4-=1;if(p>=80)m_bSet.m_column5-=1;}else{m_bSet.m_column2+=p;m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount);if(p>=60)m_bSet.m_column4+=1;if(p>=80)m_bSet.m_column5+=1;}m_bSet.Update();if(!m_bSet.IsEOF())m_bSet.MoveNext();elsebreak;}}void CBaDialog::Xuan(){m_ListCtrlb.DeleteAllItems();this->display();m_ListCtrlx.DeleteAllItems();this->Show();}void CBaDialog::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default CString m_string;m_cob.GetLBText(m_cob.GetCurSel(),m_string);if(m_Getstring!=m_string){GetDlgItem(IDC_STATR)->EnableWindow(TRUE);this->Enable(FALSE);}CDialog::OnTimer(nIDEvent);}void CBaDialog::OnAdd(){// TODO: Add your control notification handler code hereSelec=TRUE;CAddialog dlg;/////////////////////////////if(m_Set.IsOpen())m_Set.Close();if(m_bSet.IsOpen())m_bSet.Close();if(m_tSet.IsOpen())m_tSet.Close();m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring);this->Select();if(m_Getstring=="计本一班")m_tSet.Open();if(m_Getstring=="计本二班")m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2TECHER]");/////////////////////////////////if( dlg.DoModal()==IDOK){m_Set.AddNew();m_nRecordCount+=1;m_Set.m_column1=dlg.m_nxue;m_Set.m_column2=dlg.m_strName;m_Set.m_column3=dlg.m_fmaths;m_Set.m_column4=dlg.m_fphysical;m_Set.m_column5=dlg.m_fchemistry;m_Set.m_column6=dlg.m_fenglish;m_Set.m_column7=dlg.m_fpolitic;m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fengli sh+dlg.m_fpolitic;m_Set.m_column9=(float)(m_Set.m_column8/5);this->Equal();m_Set.Update();//Update()一定放在Equal()后m_Set.Requery();this->Xuan();}}void CBaDialog::OnDelect(){// TODO: Add your control notification handler code here CDelectDialog dlg;Selec=FALSE;if(dlg.DoModal()==IDOK){this->Select();m_Set.MoveFirst();BOOL sel=FALSE;do{if(m_Set.m_column1!=dlg.m_nxue)m_Set.MoveNext();else{m_nRecordCount-=1;sel=TRUE;m_bSet.MoveFirst();this->Equal();m_Set.Delete();m_Set.Requery();break;}}while(!m_Set.IsEOF());if(sel==FALSE){AfxMessageBox("没有此记录");return;}elsethis->Xuan();}}void CBaDialog::OnFind(){// TODO: Add your control notification handler code hereCFinDialog dlg;if( dlg.DoModal()==IDOK){this->Select(); //选择班级m_bSet.Close();if(dlg.m_Getstring2==">=")m_Set.m_strFilter.Format("[%s]>=%.2f",dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=="=")m_Set.m_strFilter.Format("[%s]=%.2f",dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=="<=")m_Set.m_strFilter.Format("[%s]<=%.2f",dlg.m_Getstring1,dlg.m_find);m_ListCtrlx.DeleteAllItems();m_Set.Requery();if(m_Set.IsEOF()){AfxMessageBox("没有符合条件的记录");m_Set.Close();return ;}elsethis->Show();}}void CBaDialog::OnAll(){// TODO: Add your control notification handler code herethis->Select();m_bSet.Close();m_Set.m_strFilter.Empty();m_Set.Requery();m_ListCtrlx.DeleteAllItems();this->Show();}void CBaDialog::OnEdit(){// TODO: Add your control notification handler code hereCEditDialog dlg;if(dlg.DoModal()==IDOK){this->Select();m_Set.m_strFilter.Format("[学号]=%d",dlg.m_xue);m_Set.Requery();if(m_Set.IsEOF())AfxMessageBox("没有此记录");else{for(int i=0;i<5;i++){float p=0,q=0;if(i==0){p=dlg.m_fmaths;q=m_Set.m_column3;}if(i==1){p=dlg.m_fphysical;q=m_Set.m_column4;}if(i==2){p=dlg.m_fchemistry;q=m_Set.m_column5;}if(i==3){p=dlg.m_fenglish;q=m_Set.m_column6;}if(i==4){p=dlg.m_fpolitic;q=m_Set.m_column7;}m_bSet.Edit();m_bSet.m_column2=m_bSet.m_column2+p-q;m_bSet.m_column3=m_bSet.m_column2/m_nRecordCount;if(p>=60 && q<60)m_bSet.m_column4+=1;if(p<60 && q>=60)m_bSet.m_column4-=1;if(p>=80 && q<80)m_bSet.m_column5+=1;if(p<80 && q>=80)m_bSet.m_column5-=1;m_bSet.Update();if(!m_bSet.IsEOF())m_bSet.MoveNext();elsebreak;}m_Set.Edit();m_Set.m_column2=dlg.m_strName;m_Set.m_column3=dlg.m_fmaths;m_Set.m_column4=dlg.m_fphysical;m_Set.m_column5=dlg.m_fchemistry;m_Set.m_column6=dlg.m_fenglish;m_Set.m_column7=dlg.m_fpolitic;m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fengli sh+dlg.m_fpolitic;m_Set.m_column9=(float)(m_Set.m_column8/5);m_Set.Update();}m_Set.m_strFilter.Empty();m_bSet.Close();m_Set.Close();m_ListCtrlx.DeleteAllItems();m_ListCtrlb.DeleteAllItems();this->Select();this->Show();this->display();}}void CBaDialog::Sort(BOOL isAsc,int secol){if(m_Set.IsOpen())m_Set.Close();this->Select();m_bSet.Close();CODBCFieldInfo fieldInfo;m_Set.GetODBCFieldInfo(secol,fieldInfo);if(isAsc){m_Set.m_strSort=fieldInfo.m_strName+" ASC";m_bIsAsc=TRUE;}else{m_Set.m_strSort=fieldInfo.m_strName+" DESC";m_bIsAsc=FALSE;}m_Set.Requery();}void CBaDialog::OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult) {NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;// TODO: Add your control notification handler code hereif(FALSE== m_bS){int k= pNMListView->iSubItem;Sort(!m_bIsAsc,k);m_ListCtrlx.DeleteAllItems();this->Show();}*pResult = 0;}void CBaDialog::OnExit(){exit(0);}4)、学生信息模块的代码BOOL CStuinfoDialog::OnInitDialog(){CDialog::OnInitDialog();CSInfoRecordset m_stuSet(&theApp.m_DB);// TODO: Add extra initialization here//////初始化列表框m_infolist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_infolist.InsertColumn(0,_T("学号"),LVCFMT_IMAGE|LVCFMT_LEFT);m_infolist.InsertColumn(1,"姓名");m_infolist.InsertColumn(2,"性别");m_infolist.InsertColumn(3,"民族");for(int i=0;i<4;i++)m_infolist.SetColumnWidth(i,80);return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }void CStuinfoDialog::OnAddbutton(){// TODO: Add your control notification handler code hereCAddinfoDlg dlg;if(m_stuSet.IsOpen())m_stuSet.Close();if(m_nradio==0)m_stuSet.Open();elsem_stuSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUINFO]");if(dlg.DoModal()==IDOK){m_stuSet.AddNew();m_stuSet.m_column1=dlg.m_nID;m_stuSet.m_column2=dlg.m_sname;m_stuSet.m_column3=dlg.m_ssex;m_stuSet.m_column4=dlg.m_sminzu;m_stuSet.Update();m_stuSet.Requery();m_infolist.DeleteAllItems();this->show();}}void CStuinfoDialog::OnEditebutton(){// TODO: Add your control notification handler code hereCEditinfoDlg dlg;if(m_stuSet.IsOpen())m_stuSet.Close();if(m_nradio==0)m_stuSet.Open();elsem_stuSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUINFO]");if(dlg.DoModal()==IDOK){m_stuSet.m_strFilter.Format("[学号]=%d",dlg.m_nStuID);m_stuSet.Requery();if(m_stuSet.IsEOF())AfxMessageBox("没有此记录");else{m_stuSet.Edit();m_stuSet.m_column2=dlg.m_sName;m_stuSet.m_column3=dlg.m_sSex;m_stuSet.m_column4=dlg.m_sMinzu;m_stuSet.Update();m_stuSet.Requery();m_infolist.DeleteAllItems();this->show();}}}//////////查找void CStuinfoDialog::OnFindbutton(){// TODO: Add your control notification handler code here CFindinfoDlg dlg;if(m_stuSet.IsOpen())m_stuSet.Close();if(m_nradio==0)m_stuSet.Open();elsem_stuSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUINFO]");if(dlg.DoModal()==IDOK){m_stuSet.m_strFilter.Format("[学号]=%d",dlg.m_nStuID);m_stuSet.Requery();if(m_stuSet.IsEOF()){AfxMessageBox("没有符合条件的记录");m_stuSet.Close();}else{m_infolist.DeleteAllItems();this->show();}}}void CStuinfoDialog::OnShowbutton(){// TODO: Add your control notification handler code here m_infolist.DeleteAllItems(); //清空列表if(m_stuSet.IsOpen())m_stuSet.Close();UpdateData(true);if(m_nradio==0)m_stuSet.Open( );elsem_stuSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUINFO]");this->show();}//////////显示记录集void CStuinfoDialog::show(){int i=0;m_stuSet.MoveFirst();do{CString s;s.Format("%d",m_stuSet.m_column1);m_infolist.InsertItem(i,s,0);m_infolist.SetItemText(i,1,m_stuSet.m_column2);m_infolist.SetItemText(i,2,m_stuSet.m_column3);m_infolist.SetItemText(i,3,m_stuSet.m_column4);i++;m_stuSet.MoveNext();} while(!m_stuSet.IsEOF());m_stuSet.Close();}void CStuinfoDialog::OnDeletbutton(){// TODO: Add your control notification handler code here CDeletinfoDlg dlg;if(m_stuSet.IsOpen())m_stuSet.Close();if(m_nradio==0)m_stuSet.Open();elsem_stuSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUINFO]");if(dlg.DoModal()==IDOK){m_stuSet.MoveFirst();BOOL sel=FALSE;do{if(m_stuSet.m_column1!=dlg.m_nStuID)m_stuSet.MoveNext();else{sel=TRUE;m_stuSet.Delete();m_stuSet.Requery();break;}}while(!m_stuSet.IsEOF());if(sel==FALSE){AfxMessageBox("没有此记录");return;}elsem_infolist.DeleteAllItems();this->show();}}。

相关文档
最新文档