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

时间:2024.5.15

#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->data.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.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");

flag=0;

break;}

else

p=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){ //此处假设学号形式为20101407

linklist 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.IDNumber[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.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);

s=(linklist)malloc(sizeof(st));

s->data=e; //头插法

s->next=p->next;

p->next=s;

}

/*******************************************************************************************/

void save(linklist L)

{

FILE *fp;

linklist p; /* 定义移动指针*/

char outfile[20];

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 file successfully!\n");

}

/* 从文件读数据函数*/

st *Load(linklist L)

{

linklist p1,p2,head=NULL; /*定义记录指针变量*/

FILE *fp; /* 定义指向文件的指针*/

char infile[20];

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语言学生成绩管理系统课程设计报告

C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1能按学期按班级完成对学生成绩的录入修改2能按班级统计学生的成绩求学生的总分及平均...

c语言程序设计报告 学生成绩管理系统

学生成绩管理系统课程设计报告书学生成绩管理系统单位分院班级学号姓名指导老师完成日期20xx年7月14日1学生成绩管理系统内容摘要摘要本次课程设计的课题是学生成绩管理系统本文介绍课程设计课题的选题意义说明了本系统...

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

数据结构课程设计报告学号0820xx106姓名付振华日期20xx年7月9日一课程设计题目学生成绩管理二需求分析给出n个学生的m门考试的成绩表每个学生的信息由学号姓名性别以及各科成绩组成对学生的考试成绩进行有关统...

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

学生成绩管理系统用户名xdxy密码700619includeltstdiohgtincludeltconiohgt清屏includeltstdlibhgt显示目录includeltstringhgtdefine...

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

内蒙古科技大学课程设计论文内蒙古科技大学本科生课程设计论文题目学生成绩管理系统学生姓名胡书培学号1067111106专业计算机科学与技术班级10级计算机1班指导教师周李涌20xx年12月30日1内蒙古科技大学课...

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

目录摘要11需求分析22详细设计说明221功能模块图222数据结构设计3221学生成绩信息结构体3222单链表node结构体323功能模块设计4231主函数main执行流程4232输入学生信息模块4233查询学...

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

C语言课程设计报告题目:学生成绩管理系统设计者:专业班级:计算机应用技术101班学号:指导教师:20##年12月23日学生成绩管理系统课程设计报告目录一.系统软件环境(3)二.课程设计目的(3)三.内容与要求(…

《C语言程序设计》课程设计报告(图书信息管理系统)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:会计学院专业:会计学年级:20##班别:4班指导教师:组长:同组成员:目录一、目的...............................…

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

河南理工大学计算机软件学院信管1002班C语言学生成绩管理系统程序学院计算机软件学院班级成员日期20xx96信管1002班陈昊311009030212陈梁311009030213陈俊311009030214河南...

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

学生成绩管理系统前言C语言程序设计课程设计是对学生的一种全面综合训练它包括问题分析总体结构设计用户界面设计程序设计基本技能和技巧多人合作以至一整套软件工作规范的训练和科学作风的培养是与课堂听讲自学和练习相辅相成...

C语言课程设计报告(学生成绩管理系统)

C语言课程设计报告学生成绩管理系统系统需求一当前学生信息通过结构体structstudent来保存学生的姓名学号性别语文数学英语和计算机等等相关信息并且通过cin函数来进行给当前学生输入初始信息二学生成绩查询输...

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

学生成绩管理系统课程设计报告20xx79一程序整体规划1系统的基本功能数据的录入如录入学生的基本信息以及该学生选修课程的基本信息数据的修改如修改指定学号或者指定姓名的学生信息或者修改其选修课程信息数据的插入插入...

c语言课程设计报告学生成绩管理系统(40篇)