-
2021-05-21 14:48:51
#include
#include
#include
#define m_l 10
#define m_num 30
#define m_cs 6
typedef struct student
{
long num ;
char name[m_l];
float score[m_cs];
float sum;
float aver;
}STU;
int menu(void);
void Readscore(STU stu[],int n,int m);
void Aversumofeverystudent(STU stu[],int n,int m);
void Aversumofeverycourse(STU stu[],int n,int m);
void Sortbyscore(STU stu[],int n,int m,int (*compare)(float a,float b));
int Ascending(float a,float b);
int Descending(float a,float b);
void swapfloat(float *x,float *y);
void swaplong(long *x,long *y);
void swapchar(char x[],char y[]);
void Assortbynum(STU stu[], int n, int m);
void Sortbyname(STU stu[], int n, int m);
void Searchbynum(STU stu[], int n, int m);
void Searchbyname(STU stu[], int n, int m);
void StatisticAnlysis(STU stu[], int n, int m);
void Printscore(STU stu[], int n, int m);
void Writetofile(STU stu[], int n, int m);
void Readfromfile(STU stu[], int *n, int *m);
int main()
{
char ch;
int n=0,m=0;
STU stu[m_num];
printf("请输入学生人数(n<=%d):\n",m_num);
scanf("%d",&n);
printf("请输入课程数目(m<=%d):\n",m_cs);
scanf("%d",&m);
while(1)
{
ch=menu();
switch(ch)
{
case 1:
Readscore(stu,n,m);
break;
case 2:
Aversumofeverystudent(stu ,n,m);
break;
case 3:
Aversumofeverycourse(stu ,n,m);
break;
case 4:
Sortbyscore(stu ,n,m,Descending);
printf("\n成绩降序排序\n");
Printscore( stu ,n, m);
break;
case 5:
Sortbyscore(stu ,n,m,Ascending);
printf("\n成绩升序排序\n");
Printscore( stu ,n, m);
break;
case 6:
Assortbynum( stu , n, m);
printf("\n学号升序排序\n");
Printscore( stu ,n, m);
break;
cas
更多相关内容 -
学生成绩管理系统V6.0 c语言大作业
2019-05-27 20:55:25学生信息管理系统V6.0: 设计一个学生信息管理系统,包括学生成绩信息数据的求和、排序、查找、模糊查找、分类统计、输出、读写文件等基本操作,要求编程实现如下菜单驱动的学生信息管理系统: (1)录入每个学生的... -
学生管理系统V6.0
2018-01-05 23:48:57期末c语言程序设计大作业,主要实现了学生成绩管理系统的基本功能 -
学生成绩管理系统V6.0
2012-01-05 20:26:49本系统用于统计学生的成绩并排名,可按姓名或学号查询,并可写入文件。但还未完善。 -
学生成绩管理系统v6.0,用结构体,一堆bug改不过来
2019-12-17 21:16:47void htl(STU stu[],int a,int b) { STU temp; int i,j; for(i=0;i;i++) { for(j=i;j;j++) { if(stu[i].sum[j].sum) { temp=stu[i].sum; stu[i].sum=stu[j].sum; stu[j].sum=temp;...} -
苏小红版 c语言程序设计(第三版)系列实验题:学生成绩管理系统V6.0
2022-01-03 09:56:44学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号,姓名和各科考试成绩; (2)...github:https://github.com/Jackie0Feng/SAMS
#系统需求描述某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号,姓名和各科考试成绩;
(2)计算每门课程的总分和平均分;
(3)计算每个学生的总分和平均分
(4)按每个学生的总分由高到低排出名次表;
(5)按每个学生的总分由低到高排出名次表;
(6)按学号由小到大排出成绩表;
(7)按姓名的字典顺序排出成绩表;
(8)按学号查询学生排名及其各科考试成绩;
(9)按姓名查询学生排名及其各科考试成绩;
(10)按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
(11)输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
(12)将每个学生的记录信息写入文件。
(13)从文件中读出每个学生的记录信息并显示。
要求程序运行后先显示如下菜单,并提示用户输入选项:
1.Input record
2.Caculate total and average score of every course
3.Caculate total and average score of every student
4.Sort in descending order by total score of every student
5.Sort in ascending order by total score of every student
6.Sort in ascending order by number
7.Sort in dictionary order by name
8.Search by number
9.serch by name
10.Statistic analysis
11.List record
12.Write to a file
13.Read from a file
0.Exit
Please enter your choice:
根据用户输入的选项执行相应的操作
实验目的:在学生管理系统V4.0的基础上,通过增加任务要求,熟悉文件的基本操作,模块化程序设计,增量测试方法。#顶层设计
最后一个版本就是添加文件功能,其实就是简单的讲我们的数据存储下来,以后要用的时候不用输入了,而是从本地读取。连文件管理都算不上,不过这就算操作系统的最基础的文件管理功能了。以后回看操作系统知识时脑中的概念会更加具象。/*程序功能: 学生成绩管理 编码者: JackieFeng 日期: 14/11/2021 版本号:6.0 备注: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。 学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。 增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号,姓名和各科考试成绩; (2)计算每门课程的总分和平均分; (3)计算每个学生的总分和平均分 (4)按每个学生的总分由高到低排出名次表; (5)按每个学生的总分由低到高排出名次表; (6)按学号由小到大排出成绩表; (7)按姓名的字典顺序排出成绩表; (8)按学号查询学生排名及其各科考试成绩; (9)按姓名查询学生排名及其各科考试成绩; (10)按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比; (11)输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。 (12)将每个学生的记录信息写入文件。 (13)从文件中读出每个学生的记录信息并显示。*/ #include <stdio.h> #include "SAMS.h" #include <string.h> #include <stdlib.h> //#pragma warning(disable : 4996) int main() { int order = -1;//用户指令 /*int n; long num[STU_NUM]; float score[STU_NUM];*/ //初始数据 int n = 5;//学生人数 int m = 3;//课程数 long num[STU_NUM] = { 10001,10002,10003,10004,10005 }; char name[][MAX_LEN] = { "tom","jack","bill","amy","jackie" }; float score[STU_NUM] = { 20.0,80.0,50.0,66.0,95.0 }; float score2[STU_NUM][COURSE_NUM] = { {20.0,80.0,50.0},//2表示二维 {66.0,95.0,77.0}, {63.0,77.0,81.0}, {86.0,43.0,72.0}, {96.0,95.0,89.0} }; /*这次改变了一个字段,将一维的课程升级为了二维数组, 又新增了一个功能统计每个学生所有课程的平均分和总分, 所以需要新增两个一维数组sum[],aver[]存储一下此信息.*/ /* float sum[STU_NUM] = { 0 }; float aver[STU_NUM] = { 0 };*/ //AverSumofEveryStudent(score2, sum, aver, n, m); //初始化结构体数组数据 STU students[STU_NUM]; for (int i = 0; i < n; i++) { students[i].num = num[i]; strcpy_s(students[i].name, MAX_LEN, name[i]); for (int j = 0; j < m; j++) { students[i].score[j] = score2[i][j]; } } AverSumofEveryStudent(students, n, m); Mean();//显示菜单 //使用系统 while (1) { printf("Please enter your choice : \n"); scanf_s("%d", &order); getchar();//读走缓存里的回车符 switch (order) { case 1://录入成绩 //n = ReadScore(num, score, n); n = ReadScore(students, n, m); AverSumofEveryStudent(students, n, m);//每次录入结束后都得重新计算 break; case 2://计算每门课程的总分和平均分; AverSumofEveryCourse(students, n, m); break; case 3://计算每个学生的总分和平均分 AverSumofEveryStudent(students, n, m); printf("已经重新计算总分和平均分\n"); break; case 4://按每个学生的总分由高到低排出名次表; SortbyScore(students, n, m, Descending); printf("Descendingly scorted by scores:\n"); PrintScore(students, n, m); break; case 5://按每个学生的总分由低到高排出名次表; SortbyScore(students, n, m, Ascending); printf("Ascendingly scorted by scores:\n"); PrintScore(students, n, m); break; case 6://按学号升序排名 SortbyNum(students, n, m, Ascending); printf("Ascendingly scorted by num:\n"); PrintScore(students, n, m); break; case 7://按姓名的字典顺序排出成绩表; SortbyName(students, n, m); printf("Dictionarily scorted by name:\n"); PrintScore(students, n, m); break; case 8://按学号查询学生排名及其各科考试成绩; SearchbyNum(students, n, m); break; case 9://按姓名查询学生排名及其各科考试成绩; SearchbyName(students, n, m); break; case 10://按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别, //统计每个类别的人数以及所占的百分比; StatistAnalysis(students, n, m); break; case 11://输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。 PrintScore(students, n, m); AverSumofEveryCourse(students, n, m); break; case 12://将每个学生的记录信息写入文件。 puts("正在写入students.txt文件"); WritetoFile(students, n, m); break; case 13://从文件中读出每个学生的记录信息并显示。 STU studentsNew[STU_NUM]; ReadfromFile(studentsNew, n, m); puts("新文件内容如下"); PrintScore(studentsNew, n, m); break; case 0://退出系统 printf("Good Bye!\n"); exit(0);//建议main函数用exit(0)表示正常结束 default: Mean(); break; } } } int Mean(void) { printf("1.Input record\n"); printf("2.Caculate total and average score of every course\n"); printf("3.Caculate total and average score of every student\n"); printf("4.Sort in descending order by total score of every student\n"); printf("5.Sort in ascending order by total score of every student\n"); printf("6.Sort in ascending order by number\n"); printf("7.Sort in dictionary order by name\n"); printf("8.Search by number\n"); printf("9.Search by name\n"); printf("10.Statistic analysis\n"); printf("11.List record\n"); printf("12.Write to a file\n"); printf("13.Read from a file\n"); printf("0.Exit\n"); printf("666.Show mean\n"); return 0; }
头文件
/* 函数名称: WritetoFile 功能描述: 将每个学生的记录信息写入文件 参数: STU students:学生结构体数组 n:总人数 m:课程总数 返回: 备注:*/ void WritetoFile(STU students[], int n, int m); /* 函数名称: ReadfromFile 功能描述: 从文件中读出每个学生的记录信息并显示 参数: STU students:学生结构体数组 n:总人数 m:课程总数 返回: 备注:*/ void ReadfromFile(STU students[], int n, int m);
#具体实现
void WritetoFile(STU students[], int n, int m) { FILE* fp; if (fopen_s(&fp,"students.txt", "w") != 0) { puts("文件打开失败"); exit(0); } else//按数据块读写文件 { int num = fwrite(students, sizeof(STU), n, fp); printf("成功写入%d条数据\n", num); fclose(fp); } } void ReadfromFile(STU students[], int n, int m) { FILE* fp; if (fopen_s(&fp, "students.txt", "r") != 0) { puts("文件打开失败"); exit(0); } else//按数据块读写文件 { int num = fread(students, sizeof(STU), n, fp); printf("成功写入%d条数据\n", num); fclose(fp); } }
-
c语言程序 学生证管理系统
2021-05-24 07:53:3912-18 回答/*************************************************************************学 生 成 绩 管 理 系 统 (结构版)开发者:07042T 陈影开发时间:2007-6-21Compiler: Microsoft visual C++ 6.0System Log...匿名用户
1级
2008-12-18 回答
/*************************************************************************
学 生 成 绩 管 理 系 统 (结构版)
开发者:07042T 陈影
开发时间:2007-6-21
Compiler: Microsoft visual C++ 6.0
System Loginpassword:chenying
本系统支持每个学员录入学号、姓名、以及三门课成绩,且计算总分、平均成绩
插入、删除、修改、排序、查询个人成绩 浏览所有学生成绩。
1、使用结构保存每个学员的信息。
2、通过函数实现各个功能模块。
3、使用对文件的写操作记录成绩文件.默认保存在程序所在的目录下
4、不管是用户怎样操作数据都会有文件记录,实现了实时记录数据,但是给用户
看到的文件是用户对数据操作好之后保存下来的数据.
Copyright ? 2007 北大青鸟APTECH重庆足下 Inc. All Rights Reserved ChenYiWan
/*************************************************************************/
#include //标准输入输出
#include //其它操作
#include //windows相关
#include //字符串操作
#include //系统输入输出
#include //时间相关操作
/**********************下面是对用到的全局常量声明*************************/
#define NAME 10 //学生姓名长度
#define PASSWORD " " //系统登陆密码
int input=0; //全局变量标记当前录入学员个数
float ave,sum; //平均成绩和总分
FILE *fp; //声明一个文件指针
/**************************结构体定义************************************/
struct student{ //学生成绩结构
char name[NAME]; //学生姓名
int num; //学生学号
float score1; //记录学生成绩1
float score2; //记录学生成绩2
float score3; //记录学生成绩3
float ave; //平均分
float sum; //总分
}*pp; //声明一个结构指针
/**********************下面是对用到的函数声明*****************************/
void Password(); //密码验证函数
void Save(struct student stu[]); //保存信息函数
void InputStu(struct student stu[]); //录入信息函数
void DelStu(struct student stu[]); //删除信息函数
void ModifyStu(struct student stu[]); //修改信息函数
void FindStu(struct student stu[]); //查找信息函数
void InsertStu(struct student stu[]); //插入信息函数
void SortStu(struct student stu[]); //排 序 函 数
void ListStu(struct student stu[]); //显示学员成绩信息
//**************************程序主体**************************************
void main() //程序入口
{
system("color 02"); //设置当前窗口的背景色和前景色
struct student stu[50]; //最大学员人数
struct student *p; //声明一个结构指针
p=stu; //指针指向结构变量stu
int in; //接收用户的选择
char ch; //用于判断是否继续
Password(); //调用密码验函数
do
{
system("cls");
printf("\n\n");
printf("\t\t ╭————————————————————╮\n");
printf("\t\t | 学 生 个 人 成 绩 管 理 |\n");
printf("\t\t |————————————————————|\n");
printf("\t\t | 1. 录入学生个人成绩 |\n");
printf("\t\t | |\n");
printf("\t\t | 2. 修改学生个人成绩 |\n");
printf("\t\t | |\n");
printf("\t\t | 3. 查询学生个人成绩 |\n");
printf("\t\t | |\n");
printf("\t\t | 4. 浏览所有学生成绩 |\n");
printf("\t\t | |\n");
printf("\t\t | 5. 删 除 学 生 成绩 |\n");
printf("\t\t | |\n");
printf("\t\t | 6. 插 入 学 生 成绩 |\n");
printf("\t\t | |\n");
printf("\t\t | 7. 学 员 成 绩 排序 |\n");
printf("\t\t | |\n");
printf("\t\t | 8. 学 员 成 绩 保存 |\n");
printf("\t\t | |\n");
printf("\t\t | 9. 退出成绩管理系统 |\n");
printf("\t\t ╰————————————————————╯\n");
printf("\t\t 请您正确选择: ");
if(!(scanf("%d",&in)==1))
{
while((ch=getchar())!='\n')
putchar(ch);
printf(" 没有此选项,请正确选择!");
getch();
continue;
}
fflush(stdin);
switch(in)
{
case 1:
InputStu(stu); //调用录入成绩函数
break;
case 2:
ModifyStu(stu); //调用修改成绩函数
break;
case 3:
FindStu(stu); //调用查询个人成绩函数
break;
case 4:
ListStu(stu); //调用浏览所有学生成绩函数
break;
case 5:
DelStu(stu); //调用删除学生成绩函数
break;
case 6:
InsertStu(stu); //插入学员成绩信息
break;
case 7:
SortStu(stu); //调用排序函数
break;
case 8:
Save(stu); //保存学员成绩函数
break;
case 9: //退出系统
return;
default:
printf("没有此选项,请正确选择!");
getch();
break;
}
}while(1);
}
void InputStu(struct student stu[]) //录入学员成绩函数原形
{
pp=stu; //指针指向结构
system("cls"); //清屏
int i;
printf("请问你要输入几个学生的信息:");
scanf("%d",&input);
if((fp=fopen("inputdata.sys","wb+"))==NULL) //当前目录下是否存在inputdata.sys文件
{ //"wb+":读写打开或建立一个二进制文件,允许读和写
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");
for(i=0;i
{
printf("输入学生学号:"); //输入学号
fflush(stdin);
scanf("%d",&stu[i].num);
printf("输入学生姓名:"); //输入姓名
fflush(stdin);
gets(stu[i].name);
printf("输入学生3科成绩\n");
printf("——————————————————————————————\n");
printf("\n计算机应用: "); //第一科成绩
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\nJava 语言: "); //第二科成绩
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\nC 语言: "); //第三科成绩
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("——————————————————————————————\n");
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
//下面这句代码的意思是写文件操作,后面遇到这样的代码是一样的意思
fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
}
}
void ModifyStu(struct student stu[])
{
pp=stu;
int id,i=0; //id为接收用户输入的学号
if((fp=fopen("modifydata.sys","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");
printf("\n请输入你要修改的学生的学号:");
scanf("%d",&id);
Sleep(500);
printf("\n\t查找相关数据.");
for(i=0;i<=15;i++)
{
Sleep(250);
printf(".");
}
for(i=0;i
{
if(stu[i].num==id) //如果找到了就执行下面语句 ,找不到直接回主界面
{
printf("\n输入学生新学号:"); //输入学号
fflush(stdin);
scanf("%d",&stu[i].num);
printf("\n输入学生新姓名:"); //输入姓名
fflush(stdin);
gets(stu[i].name);
printf("输入学生3科新成绩\n");
printf("——————————————————————————————\n");
printf("\n计算机应用: ");
scanf("%f",&stu[i].score1);
fflush(stdin);
printf("\nJava 语言: ");
scanf("%f",&stu[i].score2);
fflush(stdin);
printf("\n C 语言: ");
scanf("%f",&stu[i].score3);
printf("——————————————————————————————\n");
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
}
}
}
void FindStu(struct student stu[]) //查询个人成绩信息
{
int i=0,id; //循环变量和用于接收学号
printf("请输入你要查询的学生学号:");
scanf("%d",&id);
for(i=0;i
{
if (stu[i].num==id) //如果找到你查询的数据就执行下面语句
{ //如果找不到。直接回程序主界面
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
printf("\n学号 姓名 计算机应用 java语言 C 语言 总 分 平均成绩\n");
printf("\n%d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);
system("pause");
}
}
}
void InsertStu(struct student stu[]) //插入学员成绩信息
{
int flag=1;
pp=stu;
int i,id;
if((fp=fopen("insertdata.sys","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");
printf("输入你插入的学号:");
scanf("%d",&id);
for(i=0;i
{
if(stu[i].num==id) //判断学员的学号信息否存在?
{
printf("学号信息已经存在!\n");
flag=0;
getch();
break;
}
}
if (flag!=0)
{
input++; //插入一个,原来的总数增加1
printf("请确认输入要插入学生的学号:");
scanf("%d",&stu[input-1].num); //如果不存在..那么就把插入的信息放到结构数组最后
printf("输入学生姓名:");
fflush(stdin);
gets(stu[input-1].name);
printf("输入学生3科成绩\n");
printf("——————————————————————————————\n");
printf("\n计算机应用: ");
fflush(stdin);
scanf("%f",&stu[input-1].score1);
printf("\nJava 语言: ");
fflush(stdin);
scanf("%f",&stu[input-1].score2);
printf("\nC 语言: ");
fflush(stdin);
scanf("%f",&stu[input-1].score3);
printf("——————————————————————————————\n");
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[input-1].num,stu[input-1].name,stu[input-1].score1,stu[input-1].score2,stu[input-1].score3,stu[input-1].ave,stu[input-1].sum);
Sleep(500);
printf("插入数据成功!\n");
getch();
}
}
void ListStu(struct student stu[]) //浏览所有学生成绩
{
int i=0;
for(i=0;i
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
}
printf("\n学号 姓名 计算机应用 java语言 C 语言 平均成绩 总 分\n");
for(i=0;i
{
printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave, stu[i].sum);
}
getch();
}
void DelStu(struct student stu[]) //删除学员信息函数
{
pp=stu;
struct student temp;
int delnum;
char ask;
int i,j;
if((fp=fopen("Deldata.sys","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");
system("cls");
printf("\n\n\t请输入你要删除的学员的学号:");
fflush(stdin);
scanf("%d",&delnum);
printf("\n\t是否确认删除学员%d的信息(y/n)",delnum);
fflush(stdin);
ask = getchar();
if(ask != 'n')
{
for(i=0;i
{
if(stu[i].num == delnum)
break;
}
if(i > input)
printf("\n\t没有你要删除的学员!\n");
else
{
for(j=i;j
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
input--; //删掉一个学员信息后学员总数相应-1
system("cls");
printf("\n\n删除成功!\n");
}
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
getch();
}
}
void SortStu(struct student stu[]) //排序函数
{
int i,j,chose; //i,j为循环变量 chose为接收用户输入的排序方式
struct student temp;
printf("排序前的数据为\n");
printf("\n学号 姓名 计算机应用 java语言 C语言 平均成绩 总 分\n");
for(i=0;i
{
printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
}
printf("\n1.按学号排序\t2.按总分(高→低)排序\n");
printf("\n请您正确选择:");
fflush(stdin);
scanf("%d",&chose);
if(chose==1)
{
for(i=0;i
{
for(j=i+1;j
{
if(stu[i].num>stu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
printf("\n学号 姓名 计算机应用 java语言 C语言 平均成绩 总 分\n");
for(i=0;i
{
printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
}
system("pause");
}
else if(chose==2)
{
for(i=0;i
{
for(j=i+1;j
{
if(stu[i].ave
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
printf("\n学号 姓名 计算机应用 java语言 C语言 平均成绩 总 分\n");
for(i=0;i
{
printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
}
system("pause");
}
}
void Password() //密码验证函数
{
char *pass=NULL; //初始化指针
int i,count;
time_t start,end; //时间函数
pass=(char *)malloc(255*sizeof(char)); //分配内存
while(1)
{
count=0;
printf("\n\n\n\n\n\t\t\t学 生 成 绩 管 理 系 统 \n");
printf("\n\t\t UserName:ChenYiWan \n");
printf("\n\t\t PassWord:");
while((count>=0)&&(pass[count++]=getch())!=13) //密码输入
{
if(pass[0]=='\b')
{
count=0;
continue;
}
else if(pass[count-1]=='\b')
{
printf("%c%c%c",'\b','\0','\b');
count-=2;
}
else
putchar('*');
}
pass[--count]='\0';
if(!strcmp(pass,PASSWORD)) //开始验证
{
printf("\n\n\t\t\t\t\t\tLoading");
for(i=0;i<=25;i++)
{
Sleep(250);
printf(".");
}
system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t");
printf(" 欢 迎 登 陆 学 生 成 绩 管 理 系 统 !");
start=time(NULL);
end=time(NULL);
while(end-start<2) //延时2秒执行以下程序
{
end=time(NULL);
}
system("cls");
free(pass); //释放储存密码的内存
return ;
}
free(pass); //释放密码错误的那块内存
pass=(char *)malloc(255*sizeof(char)); //重新分配储存密码内存
system("cls");
printf("\a\n\n\n\n\n\n\n\n\t\t\t\t密 码 错 误 !");
getch();
system("cls");
}
}
void Save(struct student stu[]) //成绩保存函数
{
int i,j;
pp=stu; //指针指向结构
system("cls");
printf("\n\n\n\n\t\t\tSaving");
for(j=0;j<20;j++)
{
Sleep(300);
printf(".");
}
if((fp=fopen("stu_list2.doc","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fprintf(fp,"学号 \t姓名 计算机应用\tJava \tC语言 \tA v e\tS u m\n");
for(i=0;i
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp," %d \t%s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);
}
}
-
C语言小项目:学生信息管理系统(超详细)
2021-07-20 11:09:58学生信息管理系统需求概述总体设计功能划分数据结构程序流程详细设计 需求概述 编写一个可以对学生的成绩信息进行管理的系统,通过该系统可以实现对学生成绩的显示,排序,增删改查,保存载入并且统计出各科最高分和...学生信息管理系统
需求概述
编写一个可以对学生的成绩信息进行管理的系统,通过该系统可以实现对学生成绩的显示,排序,增删改查,保存载入并且统计出各科最高分和不及格人数
展示
总体设计
功能划分
密码登录模块
班级创建模块
学生信息录入模块
学生信息显示模块
学生信息查询模块
学生信息排序模块
学生信息统计模块
学生信息删除模块
学生信息新增模块
学生信息修改模块
学生信息保存模块
学生信息载入模块
系统退出模块数据结构
学生结构体链表
包含学生的学号,姓名,成绩,总分,平均分,排名程序流程
详细设计
头文件部分
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h>
结构体
#define N 30//最大容量 #define M 3//功课门数 typedef struct info { int sid;//学号 char name[20];//姓名 int score[M];//M门功课的成绩 double total;//总分 double aver;//平均分 int order; }INFO; typedef struct stu { INFO data;//数据域 struct stu *next;//指针域 }STU;
密码登录模块
int command,i,flag=0;//command为操作指令,i计数器,flag判断密码是否正确 char c, Password[6]; STU *h; printf("请输入密码(3次机会)\n"); for(i=0;i<3;i++) { int x=0; while(x<5&&c!=13)//13是回车符的ASCII码 { c=getch(); Password[x++]=c; if(c!=13) putchar('*');//输入的密码以*的形式显示 } Password[x]='\0'; if(strcmp(Password,"12345\0")==0) { flag=1; break;//如果密码正确则跳出循环 } else if(i==2) printf("\n密码错误!退出系统!"); else printf("\n密码错误!请输入正确密码:"); } if(flag) { //进入系统 }
菜单显示
void showMenu() { printf("\n密码正确!\n"); printf("------学生信息管理系统V2.0--------\n"); printf("* 1. 创建班级 *\n"); printf("* 2. 学生信息录入 *\n"); printf("* 3. 学生信息显示 *\n"); printf("* 4. 学生信息查询 *\n"); printf("* 5. 学生信息排序 *\n"); printf("* 6. 学生信息统计 *\n"); printf("* 7. 学生信息删除 *\n"); printf("* 8. 学生信息新增 *\n"); printf("* 9. 学生信息修改 *\n"); printf("* 10. 学生信息保存 *\n"); printf("* 11.学生信息载入 *\n"); printf("* 0. 退出系统 *\n"); printf("----------------------------------\n"); printf("* 作者:是我啊东山,学号:xxxx *\n"); printf("----------------------------------\n"); }
班级创建模块
printf("请输入需要创建的班级人数:"); scanf("%d",&count);//count为全局变量 printf("初始化班级人数为%d人\n",count);
学生信息录入模块
STU *createClass(int n)//n为要创建的个数 { STU *p,*q,*h;//h为头指针,p指向新创建的学生,q指向最后一个学生 int i; for(i=0;i<n;i++) { p=(STU *)malloc(sizeof(STU)); printf("请输入第%d个学生的学号、姓名、语数英成绩:",i+1); scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]); p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2]; p->data.aver=p->data.total/M; p->data.order=0; p->next=NULL; if(i==0) h=p;//将头指针固定在链表头部 else q->next=p;//将链表末尾和新创建的学生连接起来 q=p;//q指针指向新创建的学生即链表的末尾 } return h;//返回头指针 }
学生信息显示模块
void showStuInfo(STU *h)//h为头指针 { STU *p; p=h; printf("|排名 |学号 |姓名 |语文 |数学 |英语 |总分 |平均分|\n"); while(p!=NULL) { printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver); p=p->next;//当前学生信息答应完后,让p指向下一个学生 } }
学生信息查询模块
void searchStuInfo(STU *h,int n)//h为头指针,n为学号 { STU *p; p=h; int flag=0; while(p!=NULL) { if(p->data.sid==n)//学号匹配则输出 { printf("|排名 |学号 |姓名 |语文 |数学 |英语 |总分 |平均分|\n"); printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver); flag=1; break; } else//学号不匹配则指向下一个学生 p=p->next; } if(flag)//输出查询结果 printf("查询完毕!\n"); else printf("查无此人!\n"); }
学生信息排序模块
void sortStuInfo(STU *h)//h为头指针 { int x,i=1; INFO t; STU *p,*r,*s; p=h;//指向第一个节点 r=p->next;//指向第二个节点 s=r->next;//指向第三个节点 printf("总分排序输入0\n语文排序输入1\n数学排序输入2\n英语排序输入3\n"); printf("请输入:"); scanf("%d",&x); if(x) { while(p!=NULL) { while(r!=NULL) { if(p->data.score[x-1]<r->data.score[x-1])//如果前一个小于后一个则交换 { t=p->data; p->data=r->data; r->data=t; } else r=r->next; } p=p->next; r=s; } } else { while(p!=NULL) { while(r!=NULL) { if(p->data.total<r->data.total)//如果前一个小于后一个则交换 { t=p->data; p->data=r->data; r->data=t; } else r=r->next; } p=p->next; r=s; } } p=h; while(p!=NULL) { p->data.order=i++; p=p->next; } }
学生信息统计模块
void countStuInfo(STU *h)//h为头指针 { STU *p,*r,*s; INFO t; p=h;//指向第一个节点 r=p->next;//指向第二个节点 s=r->next;//指向第三个节点 int i,c=0,m=0,y=0; while(p!=NULL) { if(p->data.score[0]<60)c++; if(p->data.score[1]<60)m++; if(p->data.score[2]<60)y++; p=p->next; } for(i=0;i<3;i++) { p=h; while(p!=NULL) { while(r!=NULL) { if(p->data.score[i]<r->data.score[i])//如果前一个小于后一个则交换 { t=p->data; p->data=r->data; r->data=t; } else r=r->next; } p=p->next; r=s; } p=h; switch(i) { case 0:printf("语文最高:");break; case 1:printf("数学最高:");break; case 2:printf("英语最高:"); } printf("%s %d分\n",p->data.name,p->data.score[i]); } printf("不及格人数统计:\n"); printf("语文:%d人\n数学:%d人\n英语:%d人\n",c,m,y); }
学生信息删除模块
STU *deleteStuInfo(STU *h)//h为头指针,s为学号 { STU *head,*p,*q; head=h; int s; if(count==0) { printf("班级为空!\n"); return head; } p=h; q=p->next; printf("请输入要删除的学生的学号:"); scanf("%d",&s); printf("\n"); if(p->data.sid==s)//如果是头节点,直接返回第二个 { printf("删除成功!\n"); return q; } else { while(q!=NULL) { if(q->data.sid==s) { p->next=q->next; printf("删除成功!\n"); return head; } else { p=p->next; q=p->next; } } printf("查无此人!\n"); return head; } }
学生信息新增模块
void addStuInfo(STU *h)//h为头指针 { STU *p,*q; p=h; while(p!=NULL) { if(p->next==NULL) { count++;//人数加一 if(count>N) printf("超出最大容量\n"); else { q=(STU *)malloc(sizeof(STU)); printf("请输入添加的学生的学号、姓名、成绩:"); scanf("%d%s%d%d%d",&q->data.sid,q->data.name,&q->data.score[0],&q->data.score[1],&q->data.score[2]); q->data.total=q->data.score[0]+q->data.score[1]+q->data.score[2]; q->data.aver=q->data.total/M; q->data.order=0; q->next=p->next; p->next=q; printf("添加成功!\n"); break; } } p=p->next; } }
学生信息修改模块
void changeStuInfo(STU *h, int n)//h为头指针 { int flag=0; STU *p; p=h; while(p!=NULL) { if(p->data.sid==n) { printf("请输入学生的学号、姓名、语数英成绩:"); scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]); p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2]; p->data.aver=p->data.total/M; p->data.order=0; printf("修改成功!\n"); flag=1; break; } else p=p->next; } if(flag==0) printf("查无此人!\n"); }
学生信息保存模块
void saveStuInfo(STU *h)//h为头指针 { STU *p; FILE *fp; p=h; fp=fopen("data.txt","w"); if(fp==NULL) { printf("无法打开文件!"); exit(0); } else { fprintf(fp,"%d\n",count);//保存学生人数信息 while(p!=NULL) { fprintf(fp,"%d%s\n%d\n%d\n%d\n%f\n%f\n%d\n",p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver,p->data.order);//保存学生信息 p=p->next; } } fclose(fp); printf("保存成功\n"); }
学生信息载入模块
STU *loadStuInfo(STU *h)//h为头指针 { int i; STU *p,*q; FILE *fp; fp=fopen("data.txt","r"); if(fp==NULL) { printf("无法打开文件!"); exit(0); } else { fscanf(fp,"%d\n",&count);//读取学生人数信息 printf("|排名 |学号 |姓名 |语文 |数学 |英语 |总分 |平均分|\n"); for(i=1;i<count;i++) { p=(STU *)malloc(sizeof(STU)); fscanf(fp,"%d%s%d%d%d%lf%lf%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2],&p->data.total,&p->data.aver,&p->data.order); printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver); p->next=NULL; if(i==1) h=p;//将头指针固定在链表头部 else q->next=p;//将链表末尾和新创建的学生连接起来 q=p;//q指针指向新创建的学生即链表的末尾 } printf("读取成功\n"); } fclose(fp); return h; }
完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define N 30//最大容量 #define M 3//功课门数 typedef struct info { int sid;//学号 char name[20];//姓名 int score[M];//M门功课的成绩 double total;//总分 double aver;//平均分 int order; }INFO; typedef struct stu { INFO data;//数据域 struct stu *next;//指针域 }STU; int count=0,n; void showMenu();//显示菜单 STU *createClass(int n);//学生信息录入模块 void showStuInfo(STU *h);//学生信息显示模块 void searchStuInfo(STU *h,int n);//学生信息查询模块 void sortStuInfo(STU *h);//学生信息排序模块 void countStuInfo(STU *h);//学生信息统计模块 STU *deleteStuInfo(STU *h);//学生信息删除模块 void addStuInfo(STU *h);//学生信息新增模块 void changeStuInfo(STU *h, int n);//学生信息修改模块 void saveStuInfo(STU *h);//学生信息保存模块 STU *loadStuInfo(STU *h);//学生信息载入模块 int main() { int command,i,flag=0;//command为操作指令,i计数器,flag判断密码是否正确 char c, Password[6]; STU *h; printf("请输入密码(3次机会)\n"); for(i=0;i<3;i++) { int x=0; while(x<5&&c!=13)//13是回车符的ASCII码 { c=getch(); Password[x++]=c; if(c!=13) putchar('*');//输入的密码以*的形式显示 } Password[x]='\0'; if(strcmp(Password,"12345\0")==0) { flag=1; break;//如果密码正确则跳出循环 } else if(i==2) printf("\n密码错误!退出系统!"); else printf("\n密码错误!请输入正确密码:"); } if(flag) { showMenu(); printf("请选择:"); scanf("%d",&command); printf("\n"); while(1)//根据command的值执行不同的值 { switch(command){ case 1:{ printf("请输入需要创建的班级人数:"); scanf("%d",&count); printf("初始化班级人数为%d人\n",count); };break; case 2:{ h=createClass(count); printf("学生信息录入成功!\n"); };break; case 3:{ showStuInfo(h); printf("学生信息显示成功!\n"); };break; case 4:{ printf("请输入学生的学号:"); scanf("%d",&n); searchStuInfo(h,n); };break; case 5:{ sortStuInfo(h); printf("排序成功!\n"); };break; case 6:countStuInfo(h);break; case 7:h=deleteStuInfo(h);break; case 8:addStuInfo(h);;break; case 9:{ printf("请输入要修改的学生的学号:"); scanf("%d",&n); changeStuInfo(h,n); };break; case 10:saveStuInfo(h);break; case 11:h=loadStuInfo(h);break; case 0:exit(0);//退出系统 } printf("按任意健继续"); getch();//让程序暂停一下,按任意键继续 system("cls");//清除屏幕 showMenu(); printf("请选择:"); scanf("%d",&command); } } return 0; } void showMenu() { printf("\n密码正确!\n"); printf("------学生信息管理系统V2.0--------\n"); printf("* 1. 创建班级 *\n"); printf("* 2. 学生信息录入 *\n"); printf("* 3. 学生信息显示 *\n"); printf("* 4. 学生信息查询 *\n"); printf("* 5. 学生信息排序 *\n"); printf("* 6. 学生信息统计 *\n"); printf("* 7. 学生信息删除 *\n"); printf("* 8. 学生信息新增 *\n"); printf("* 9. 学生信息修改 *\n"); printf("* 10. 学生信息保存 *\n"); printf("* 11.学生信息载入 *\n"); printf("* 0. 退出系统 *\n"); printf("----------------------------------\n"); printf("* 作者:顾凡,学号:092620209 *\n"); printf("----------------------------------\n"); } STU *createClass(int n)//n为要创建的个数 { STU *p,*q,*h;//h为头指针,p指向新创建的学生,q指向最后一个学生 int i; for(i=0;i<n;i++) { p=(STU *)malloc(sizeof(STU)); printf("请输入第%d个学生的学号、姓名、语数英成绩:",i+1); scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]); p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2]; p->data.aver=p->data.total/M; p->data.order=0; p->next=NULL; if(i==0) h=p;//将头指针固定在链表头部 else q->next=p;//将链表末尾和新创建的学生连接起来 q=p;//q指针指向新创建的学生即链表的末尾 } return h;//返回头指针 } void showStuInfo(STU *h)//h为头指针 { STU *p; p=h; printf("|排名 |学号 |姓名 |语文 |数学 |英语 |总分 |平均分|\n"); while(p!=NULL) { printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver); p=p->next;//当前学生信息答应完后,让p指向下一个学生 } } void searchStuInfo(STU *h,int n)//h为头指针,n为学号 { STU *p; p=h; int flag=0; while(p!=NULL) { if(p->data.sid==n)//学号匹配则输出 { printf("|排名 |学号 |姓名 |语文 |数学 |英语 |总分 |平均分|\n"); printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver); flag=1; break; } else//学号不匹配则指向下一个学生 p=p->next; } if(flag)//输出查询结果 printf("查询完毕!\n"); else printf("查无此人!\n"); } void countStuInfo(STU *h)//h为头指针 { STU *p,*r,*s; INFO t; p=h;//指向第一个节点 r=p->next;//指向第二个节点 s=r->next;//指向第三个节点 int i,c=0,m=0,y=0; while(p!=NULL) { if(p->data.score[0]<60)c++; if(p->data.score[1]<60)m++; if(p->data.score[2]<60)y++; p=p->next; } for(i=0;i<3;i++) { p=h; while(p!=NULL) { while(r!=NULL) { if(p->data.score[i]<r->data.score[i])//如果前一个小于后一个则交换 { t=p->data; p->data=r->data; r->data=t; } else r=r->next; } p=p->next; r=s; } p=h; switch(i) { case 0:printf("语文最高:");break; case 1:printf("数学最高:");break; case 2:printf("英语最高:"); } printf("%s %d分\n",p->data.name,p->data.score[i]); } printf("不及格人数统计:\n"); printf("语文:%d人\n数学:%d人\n英语:%d人\n",c,m,y); } void sortStuInfo(STU *h)//h为头指针 { int x,i=1; INFO t; STU *p,*r,*s; p=h;//指向第一个节点 r=p->next;//指向第二个节点 s=r->next;//指向第三个节点 printf("总分排序输入0\n语文排序输入1\n数学排序输入2\n英语排序输入3\n"); printf("请输入:"); scanf("%d",&x); if(x) { while(p!=NULL) { while(r!=NULL) { if(p->data.score[x-1]<r->data.score[x-1])//如果前一个小于后一个则交换 { t=p->data; p->data=r->data; r->data=t; } else r=r->next; } p=p->next; r=s; } } else { while(p!=NULL) { while(r!=NULL) { if(p->data.total<r->data.total)//如果前一个小于后一个则交换 { t=p->data; p->data=r->data; r->data=t; } else r=r->next; } p=p->next; r=s; } } p=h; while(p!=NULL) { p->data.order=i++; p=p->next; } } STU *deleteStuInfo(STU *h)//h为头指针,s为学号 { STU *head,*p,*q; head=h; int s; if(count==0) { printf("班级为空!\n"); return head; } p=h; q=p->next; printf("请输入要删除的学生的学号:"); scanf("%d",&s); printf("\n"); if(p->data.sid==s)//如果是头节点,直接返回第二个 { printf("删除成功!\n"); return q; } else { while(q!=NULL) { if(q->data.sid==s) { p->next=q->next; printf("删除成功!\n"); return head; } else { p=p->next; q=p->next; } } printf("查无此人!\n"); return head; } } void addStuInfo(STU *h)//h为头指针 { STU *p,*q; p=h; while(p!=NULL) { if(p->next==NULL) { count++;//人数加一 if(count>N) printf("超出最大容量\n"); else { q=(STU *)malloc(sizeof(STU)); printf("请输入添加的学生的学号、姓名、成绩:"); scanf("%d%s%d%d%d",&q->data.sid,q->data.name,&q->data.score[0],&q->data.score[1],&q->data.score[2]); q->data.total=q->data.score[0]+q->data.score[1]+q->data.score[2]; q->data.aver=q->data.total/M; q->data.order=0; q->next=p->next; p->next=q; printf("添加成功!\n"); break; } } p=p->next; } } void changeStuInfo(STU *h, int n)//h为头指针 { int flag=0; STU *p; p=h; while(p!=NULL) { if(p->data.sid==n) { printf("请输入学生的学号、姓名、语数英成绩:"); scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]); p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2]; p->data.aver=p->data.total/M; p->data.order=0; printf("修改成功!\n"); flag=1; break; } else p=p->next; } if(flag==0) printf("查无此人!\n"); } void saveStuInfo(STU *h)//h为头指针 { STU *p; FILE *fp; p=h; fp=fopen("data.txt","w"); if(fp==NULL) { printf("无法打开文件!"); exit(0); } else { fprintf(fp,"%d\n",count);//保存学生人数信息 while(p!=NULL) { fprintf(fp,"%d%s\n%d\n%d\n%d\n%f\n%f\n%d\n",p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver,p->data.order);//保存学生信息 p=p->next; } } fclose(fp); printf("保存成功\n"); } STU *loadStuInfo(STU *h)//h为头指针 { int i; STU *p,*q; FILE *fp; fp=fopen("data.txt","r"); if(fp==NULL) { printf("无法打开文件!"); exit(0); } else { fscanf(fp,"%d\n",&count);//读取学生人数信息 printf("|排名 |学号 |姓名 |语文 |数学 |英语 |总分 |平均分|\n"); for(i=1;i<count;i++) { p=(STU *)malloc(sizeof(STU)); fscanf(fp,"%d%s%d%d%d%lf%lf%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2],&p->data.total,&p->data.aver,&p->data.order); printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver); p->next=NULL; if(i==1) h=p;//将头指针固定在链表头部 else q->next=p;//将链表末尾和新创建的学生连接起来 q=p;//q指针指向新创建的学生即链表的末尾 } printf("读取成功\n"); } fclose(fp); return h; }
-
求学生成绩系统V6.0 C语言编译
2017-10-28 13:12:18学生成绩管理系统V6.0 某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。 2.实验要求 采用自顶... -
学生成绩管理系统(C语言大作业)
2020-07-13 10:41:59设计一个学生成绩管理系统,包括学生成绩数据的增删改查等基本操作,通过编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号、姓名和各科考试成绩; (2)计算每门课程的总分和平均分; (3)计算每... -
学生成绩管理系统C++实现代码
2021-05-21 18:18:15本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下* (程序头部注释开始)* ...学生成绩管理系统》* 作 者: 刘江波* 完成日期: 2012 年 6 月 26 日* 版 本 号: v.626* 对任务及求解方... -
学生信息管理系统 源代码 VC6.0
2008-11-19 17:04:13c语言课程设计 学生信息管理系统 源代码 使用VC6 main() { int choice; load_message(); do { clear(); printf("\n\n\n *****学生信息管理系统*****\n\n\n"); printf(" 1.学生信息录入:\n\n"); printf(" 2.... -
c学生成绩管理系统学生成绩管理系统
2009-06-17 00:51:16学生成绩管理系统学生成绩管理系统学生成绩管理系统 -
学生成绩管理系统1.0
2012-05-29 23:54:56学生成绩管理系统1.0,大学生实验必备·····有了1.0做基础,6.0不是问题` -
学生管理系统(C语言)
2021-11-05 01:08:35以下是一个普通的学生管理系统,对于一些小项目要注意拿来做练习。 -
C语言开发学生成绩管理系统
2021-05-05 15:15:33学生成绩管理系统 开发工具:VC++6.0 开发时间:2021.5.5 开发者:kkflaming 一、系统功能介绍 1.录入学生信息:用户可以自由输入学生信息到系统中。 2.打印学生信息:格式化展示系统中的学生信息。 3.保存学生信息... -
C语言学生信息系统课设(附源码).doc
2021-05-20 06:33:36PAGE 1PAGE 1C语言学生信息系统课设项目说明本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行。(书生)项目运行截图代码界面截图完整源码/** Copyright (c) ... -
C语言版学生成绩管理系统(包括本地信息保存,供参考)
2019-04-24 16:41:05//打印菜单函数 void printMenu() { printf("\n|---------学生成绩管理系统V6.0---|\n"); printf("|--------1.添加学生信息----------|\n"); printf("|--------2.查询学生信息----------|\n"); printf("|--------3.... -
C\C++ 学生管理成绩管理系统V1.01(作业)
2014-07-03 11:13:08VC6.0编译通过, 利用结构体,结构体指针,单链表,文件操作,命令窗口下简单菜单设计,可从文件读入数据,自动保存数据,有错误自动判断修复,能添加,删除,查询,显示,排序记录,已经适合多数初学者期末C语言作业... -
c 学生成绩管理系统 毕业设计 源码
2010-06-29 17:25:46说明: 去年写的毕业设计题目, 基于Windows C 开发的学生成绩管理系统 开发环境:VC++6.0, Mysql 4.0 运行平台:Windows Xp/2000 -
《C语言编写 学生成绩管理系统》
2014-08-07 15:42:00/* (程序头部凝视開始) ...* 文件名: 学生成绩管理系统 * 作 者: 刘江波 * 完毕日期: 2012 年 6 月 23 日 * 版 本 号: v.623 * 对任务及求解方法的描写叙述部分 * 程序头部的凝视结束... -
C语言用户注册登录管理系统_基于Java web的图书借阅管理系统
2020-11-21 23:39:10源码编号:B-E00007 点击查看(分类规则)项目类型:Java EE项目(非开源)项目名称:基于Java web的图书借阅管理系统(books)当前版本:V2.0.3版本难度等级:✩复杂程度:✩✩✩点击查看难度等级用户类型:有普通用户和... -
C语言旅途之简单的学习成绩管理系统(函数的调用)
2020-02-12 18:04:31//简单的学习成绩管理 #include<stdio.h> int score[5][4]={{100,90,89,78}, {101,55,89,87}, {102,87,67,65}, {103,99,76,89}, {104,78,67,88}}; int main() { int a,num; void query(int); v... -
图书管理系统(C+MySQL)
2020-06-10 13:16:44C+MySQL图书管理系统 /////////////////////////////////////项目效果///////////////////////////////////// //登录界面 //借阅人登录界面 //借阅人功能菜单 //管理员登录界面 //管理员功能菜单 //分类查询 ... -
学生成绩管理系统V3.0链表版
2015-12-23 09:07:35刚刚做完的一个课题作业,虽然还... printf(" * 从文件批量录入学生信息 *\n"); printf(" ****************************************************************\n"); stu = creat_file(); break; ... -
【C语言】vc6.0运行程序过程中提示***.EXE已停止工作
2015-03-20 23:55:11printf("╭══════╣通讯管理系统V1.0╠══════╮\n"); printf("║ ╰════════╯ ║\n"); printf("║ 【1】添加数据 【3】退出系统 ║\n"); printf("║ ║\n"); printf("║ 【2】查询... -
C语言程序设计学习指导(第3版)
2021-05-19 11:41:22《C语言程序设计学习指导(第3版)》是国家精品开放课程、中国大学MOOC课程主讲教材《c语言程序设计》(第3版)的配套参考书。《C语言程序设计学习指导(第3版)》共2章,第1章为习题解答,包括主教材中的全部习题及解答。... -
手机c语言编程软件
2021-05-19 03:39:45如果在手机上学C语言编程,可以试试名为易历知食复的软件,其内部有项功能叫微C程序设计,可以在手机上进行C语言编程练习,其自带的示例如下图:最简制单的入门程序:运行结果:99乘法表程序:运行结果:其自带的... -
校园导航系统课程设计,#校园管理系统
2020-06-07 15:29:30****校园导航系统****@大学 C++/C语言/数据结构/课设 1.课程设计目的 (1)为了进一步巩固课堂上所学到的知识,深刻把握为了进一步巩固课堂上所学到的知识,深刻掌握所学重要的数据结构类型的基本概念,逻辑结构和...