c语言学生作业管理系统,用C语言写的学生管理系统

学生成绩管理系统(C)

/*

**********************************************************************************

* 大一第一学期期末成绩管理系统

*

* 开发环境:VC++6.0

*

* 将全班学生成绩以记录的形式存储在文件中

* 记录包含每个学生的姓名、学号、性别、三科(高等数学、大学英语、C语言)成绩

* 程序功能:1.求各门课程总分、平均分; 2.求各个学生总分、平均分;

* 3.按姓名、学号查找学生记录并显示; 4.浏览全部学生成绩;

*

* Author: 啊杜

* email : ttl7626@126.com

**********************************************************************************

*/

#include

#include

#include

#define SUBJECT_NUMBER 3 //课程数目

#define SUBJECT_LENGTH 20 //课程名最大长度

#define NAME_LENGTH 20 //姓名最大长度

#define CODE_LENGTH 10 //学号最大长度

#define SEX 5 //性别长度

#define FILE_LENGTH 80 //文件名最大长度

#define BUFFER_LENGTH 80 //缓冲区最大长度

char subjectName[SUBJECT_NUMBER][SUBJECT_LENGTH] = {"高等数学", "大学英语", "C语言"}; //课程名称

int total[SUBJECT_NUMBER]; //各课程总分

char fileName[FILE_LENGTH]; //文件名

//结构——学生记录

struct record

{

char name[NAME_LENGTH+1]; //姓名

char code[CODE_LENGTH+1]; //学号

char sex[SEX]; //性别

int mark[SUBJECT_NUMBER+1]; //各科成绩

int total; //总分

}student;

//从指定文件读入一个记录

int ReadRecord (FILE *fpt, struct record *ppt)

{

char buf[BUFFER_LENGTH];

int i;

if (1 != fscanf (fpt, "%s", buf))

{

printf ("文件 %s 无法打开!\n", fpt);

return 0;

}

strncpy (ppt->name, buf, NAME_LENGTH); //存储学生姓名

fscanf (fpt, "%s", buf);

strncpy (ppt->code, buf, CODE_LENGTH); //存储学生学号

fscanf (fpt, "%s", buf);

strncpy (ppt->sex, buf, SEX); //存储学生性别

for (i = 0; i < SUBJECT_NUMBER; i++)

fscanf(fpt, "%d", &ppt->mark[i]); //存储学生各科成绩

for (ppt->total = 0, i = 0; i < SUBJECT_NUMBER; i++)

ppt->total += ppt->mark[i]; //计算学生总成绩

return 1;

}

//对指定文件写入一个记录

void WriteRecord (FILE *fpt, struct record *ppt)

{

int i;

fprintf (fpt, "%s\n", ppt->name); //写入学生姓名

fprintf (fpt, "%s\n", ppt->code); //写入学生学号

fprintf (fpt, "%s\n", ppt->sex); //写入学生性别

for (i = 0; i < SUBJECT_NUMBER; i++)

fprintf(fpt, "%d\n", ppt->mark[i]); //写入学生各科成绩

}

//显示某个学生的记录

void DisplayStudent (struct record *ppt)

{

int i;

printf ("\n姓名: %s\n", ppt->name); //显示姓名

printf ("\n学号: %s\n", ppt->code); //显示学号

printf ("\n性别: %s\n", ppt->sex); //显示性别

printf ("各科成绩:\n");

for (i = 0; i < SUBJECT_NUMBER; i++)

printf ("%-s :%d\n", subjectName[i], ppt->mark[i]); //显示各科成绩

printf ("\n总分: %d\n", ppt->total); //显示学生总分

printf ("\n平均分: %.2f\n", (float)ppt->total / SUBJECT_NUMBER); //显示学生平均分

}

//显示所有学生的记录

void ListStudent (char *fname)

{

FILE *fp;

struct record s;

if (NULL == (fp = fopen(fname, "r")))

{

printf ("文件 %s 打不开!", fname);

return ;

}

while (0 != ReadRecord (fp, &s))

{

DisplayStudent(&s); //显示学生信息

printf ("Press \"Enter\" to continue...");

while ('\n' != getchar())

;

}

fclose(fp);

return ;

}

//计算各科总分

int TotalMark (char *fname)

{

FILE *fp;

struct record s;

int i, count = 0;

if (NULL == (fp = fopen(fname, "r"))) //如果文件打不开,就退出

{

printf ("文件 %s 打不开!", fname);

return 0;

}

for (i = 0; i < SUBJECT_NUMBER; i++) //初始化各科总分为0

total[i] = 0;

while (0 != ReadRecord (fp, &s))

{

for (i = 0; i < SUBJECT_NUMBER; i++)

total[i] += s.mark[i]; //各科总分

count++; //有记录的学生人数

}

fclose(fp);

return count; //返回记录数

}

//按学生姓名查找记录

int RetrieveByName (char *fname, char *key)

{

FILE *fp;

int n = 0;

struct record s;

if (NULL == (fp = fopen(fname, "r")))

{

printf ("文件 %s 无法打开!\n", fname);

return 0;

}

while (0 != ReadRecord (fp, &s))

{

if (0 == (strcmp (s.name, key))) //按姓名查找某一个或多个学生

{

DisplayStudent (&s); //显示某一个或多个学生的记录

n++;

}

}

fclose (fp);

if (0 == n)

printf ("学生 %s 不在文件 %s 中!\n", key, fname);

return 1;

}

//按学生学号查找记录

int RetrieveByCode (char *fname, char *key)

{

FILE *fp;

int n = 0;

struct record s;

if (NULL == (fp = fopen(fname, "r")))

{

printf ("文件 %s 无法打开!\n", fname);

return 0;

}

while (0 != ReadRecord (fp, &s))

{

if (0 == (strcmp (s.code, key))) //按学号查找某一个学生

{

DisplayStudent (&s); //显示某一个个学生的记录

n++;

break;

}

}

fclose (fp);

if (0 == n)

printf ("学生 %s 不在文件 %s 中!\n", key, fname);

else if (1 != n)

printf ("学生 %s 学号被盗用!\n", key);

return 1;

}

//主函数

main (void)

{

FILE *fp;

int i, j, n;

char c;

char buf[BUFFER_LENGTH];

//int total[SUBJECT_NUMBER];

struct record s;

printf ("输入储存学生记录的文件名: ");

scanf ("%s", fileName);

if(NULL == (fp = fopen(fileName, "r")))

{

printf ("文件 %s 无法打开或不存在,你要建立一个吗?(Y/N) ", fileName);

getchar();

c = getchar();

if('Y' == c || 'y' == c)

{

fp = fopen(fileName, "w");

printf ("你要往文件中输入多少个记录: ");

scanf ("%d", &n);

for(i = 0; i < n; i++)

{

printf ("输入学生姓名: ");

scanf ("%s", &s.name);

printf ("输入学生学号: ");

scanf ("%s", &s.code);

printf ("输入学生性别:");

scanf ("%s", &s.sex);

for(j = 0; j < SUBJECT_NUMBER; j++)

{

printf ("输入 %s 成绩: ",subjectName[j]);

scanf ("%d", &s.mark[j]);

}

WriteRecord (fp, &s);

}

fclose(fp);

}

}

fclose(fp);

getchar();

puts("现在可以输入命令来管理学生记录了!");

puts("m : 各科平均分");

puts("t : 各科总分");

puts("n : 通过姓名查找学生记录");

puts("c : 通过学号查找学生记录");

puts("l : 查看全部学生记录");

puts("q : 退出");

while(1)

{

puts("输入命令:");

scanf (" %c",&c);

if('q' == c || 'Q' == c)

{

puts("\n 谢谢使用(*^_^*).");

break; //结束程序运行

}

switch(c)

{

case 'm': //计算平均分

case 'M':

if(0 == (n = TotalMark(fileName)))

{

puts("错误!");

break;

}

printf ("\n");

for(i = 0; i < SUBJECT_NUMBER; i++)

printf ("%-s 的平均分: %.2f\n", subjectName[i], (float)total[i] / n);

break;

case 't': //计算总分

case 'T':

if(0 == (n = TotalMark (fileName)))

{

puts("错误!");

break;

}

printf ("\n");

for(i = 0; i < SUBJECT_NUMBER; i++)

printf("%-s 的总分: %d\n", subjectName[i], total[i]);

break;

case 'n': //按学生的姓名寻找记录

case 'N':

printf ("输入你要查询的学生的姓名: ");

scanf ("%s", buf);

RetrieveByName (fileName, buf); //按姓名查找的查询结果

break;

case 'c': // 按学生的学号寻找记录

case 'C':

printf ("输入你要查询的学生的学号: ");

scanf ("%s",buf);

RetrieveByCode (fileName, buf); //按学号查找的查询结果

break;

case 'l': // 列出所有学生记录

case 'L':

ListStudent (fileName);

break;

default:

break;

}

}

return 0;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值