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

更新时间:2024-04-03 14:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C程序设计》)

设计报告书

学生成绩管理系统

学生姓名 学班成

计算机科学与技术专业

2015年 01 月 6 日

号 级 绩

1

摘 要

本系统主要用于学生成绩管理与查询,主要功能包括数据的录入、读取、显示、删除、插入、查找、修改、排名。主要使用人群:龙岩学院信息工程院全体学生。

2

目 录

1 课题综述······································································ X 1.1课题内容·································································X 1.2意义···································································· X 1.3设计目的································································ X 2 系统分析····································································· X 2.1相关基础知识···························································· X 2.2 总体方案······························································· X 3 系统设计···································································· X 3.1 新建文件······························································· X 3.2 打开文件······························································· X 3.3 修改功能······························································· X 3.4 插入功能·································································X 3.5 查询功能·································································X 3.6 删除功能······························································· X 3.7 排名功能································································ X 3.8 关于我们 ······························································ X 3.9 软件说明····························································· X 3.10退出保存 ······························································ X 4 代码编写·······································································X 4.1 总程序····································································X 5 总 结···········································································X 参考文献··········································································X

3

1 课题综述

1.1课题内容

每个学生的信息为:学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、

大学语文、汇编、中近史)、总分、平均成绩。 功能:

(1) 按学号顺序输入学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),并存入文件中。 (2) 从文件读取数据 (3) 删除学生信息

(4) 查询学生信息(查询可分为精确查询和模糊查询) (5) 修改学生信息(要求修改后,数据依然是按学号顺序排列) (6) 插入学生信息(要求插入后,数据依然是按学号顺序排列) (7) 附加功能,学生可自由发挥,如:排名、求各门课程平均分等。

1.2 意义

通过该课程设计,为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。把现实世界中的实际问题在计算机内并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。同时将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,对C系统编程有一个大致的了解。

1.3 设计目的

1、掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体。 2、能够采用模块化思想调试程序。

3、通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。

1

2、系统分析

2.1 相关基础知识

选择、循环、函数、指针、结构体、链表 2.2 总体方案 架构图:

方案描述:

菜单:运用switch case选择功能,在每个case中有相对应的调用语句,调用相对应的函数。

删除功能:调用删除函数,判断是否保存,如果保存写入文件。 插入功能:运用链表插入。

修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。 查询功能:调用菜单中的查询函数,用循环实现查询功能。 排名功能:调用菜单中的排名函数,通过冒泡排序法实现功能。 保存功能:运用写入文件。

2

3.系统设计

定义一个student类型的结构体,里面包含学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。 3.1 新建功能

从键盘输入N个学生基本信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),编程根据输入信息计算各学生总分和平均分。

创建动态链表,将学生信息存入链表中。在DOS屏幕上打印链表内所有学生信息。 新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。 3.2 打开功能

打开一个文件,从文件中读取学生信息,并新建链表,将数据存入动态链表。 在DOS屏幕上打印链表内所有学生信息。 3.3 修改功能

在DOS屏幕上打印出当前的所有学生信息。

输入待修改的学生学号,若不存在,输出“查无此人”;若存在,则输入修改的信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。

最后在DOS屏幕上打印出新的所有学生信息。 3.4 插入功能

在DOS屏幕上打印出当前的所有学生信息。

输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),根据输入信息计算各学生总分和平均分。

若输入的学生学号已经存在,则输出“该学号已存在,无法操作!”,否则将学生信息插入到链表中,插入后链表中的数据依然按照学号排列。

最后在DOS屏幕上打印出新的所有学生信息。 3.5 查询功能

查询分为:精确查询、模糊查询 精确查询: (1)按姓名查询 输入待查询的姓名;

根据顺序查询的方法,对学生的姓名依次查询,直到查询到与输入的信息相匹配的信息,

3

并在DOS屏幕上显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。

(2)按学号查询

输入待查询的学号;

根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。 模糊查询: (1)按姓氏查询 输入待查询的姓氏;

根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。若需要查询的信息不存在,系统则会提示找不到相关信息。可重复查询。 (2)按性别查询 输入待查询的性别;

根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。可重复查询。 3.6 删除功能

在DOS屏幕上打印出当前的所有学生信息。

(1)按姓名删除

输入需要删除的学生姓名;

根据顺序查询的方法,对学生的姓名依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。 (2)按学号删除

输入需要删除的学生学号;

根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。

4

3.7排名功能

可根据学生的总分进行排名,并在DOS屏幕上输出排名结果。 3.8 关于我们

在DOS屏幕上输出系统相关信息。 3.9 软件说明 3.10 退出保存

选择‘0’退出系统,保存功能在每段函数结束后实现。 3.10运行结果

(示例)

3.10.0 主界面

3.10.1 新建文件(输入一组数据,存入文件中)

5

3.10.2 打开文件(打开文件,读取文件数据存入链表)

6

3.10.3 修改功能

3.10.4 插入功能

7

3.10.5 查询功能

8

精确查询-按姓名查询

精确查询-按学号查询

模糊查询-按姓氏查询

9

模糊查询-按性别查询

3.10.6 删除功能

按姓名删除

10

按学号删除

3.10.7 总分排名功能

11

3.10.9 软件说明

3.10.10 退出保存

保存功能在每段函数结束后实现。

12

4 代码编写

#include #include #include

/*---------------------------------------------------------*/ #define LEN sizeof(struct student)//结构体长度

/*---------------------------------------------------------*/ #define NEW (struct student *)malloc(LEN)

/*---------------------------------------------------------*/ FILE *fp;/*文件指针*/

/*---------------------------------------------------------*/ struct student {

int num;

char name[20];

int score1,score2,score3,score4,score5; char sex; double aver; float sum;

struct student *next; };

char filename[100];

struct student *creat( ) { struct student *h; struct student *p,*q;

printf(\需要输入几条信息:\

int i,n;

scanf(\

printf(\请按学号顺序依次输入学生信息----------\\n\ char c=getchar(); h=NULL;

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

{ p=NEW;

13

if (p==NULL)

{ printf(\ exit(0); }

printf(\

printf(\输入姓名<如:zhangsan>: \ gets(p->name);

printf(\输入学号<如:1>: \ scanf(\ c=getchar();

printf(\输入性别: \ scanf(\

printf(\输入c语言成绩: \ scanf(\ printf(\输入高数成绩: \ scanf(\

printf(\输入大学语文成绩: \ scanf(\

printf(\输入汇编语言成绩: \

scanf(\ printf(\输入中近史成绩: \ scanf(\ c=getchar();

p->sum=p->score1+p->score2+p->score3+p->score4+p->score5;

p->aver=(p->score1+p->score2+p->score3+p->score4+p->score5)/5.0; p->next=NULL;

if (h==NULL) /* h为空,表示新结点为第一个结点 */ h=p; /* 头指针指向第一个结点 */ else /* h不为空 */ q->next=p; /* 新结点与尾结点相连接 */ q=p;/* 使q指向新的尾结点 */ }

return h; }

struct student *paixu (struct student *head) /* 总分排名 */

14

{ system(\

printf(\总分排名如下:\\n\ struct student *op; struct student *p; struct student *p1,*p2;

p1 = (struct student *) malloc (LEN); p1->next = head; head = p1;

for (op = NULL; op != head; op = p)

{

for (p = p1 = head; p1->next->next!=op; p1 = p1->next) {

if (p1->next->sum < p1->next->next->sum) {

p2 = p1->next->next;

p1->next->next = p2->next; p2->next = p1->next; p1->next = p2; p = p1->next->next; } } }

p1 = head; head = head->next; free (p1); p1 = NULL;

return head; }

void prlist(struct student *head)/*输出函数*/ { struct student *p;

p=head;

printf(\学号 姓名 性别 c语言 高数 大学语文 汇编语言平均分\\n\

15

总分 中近史 while (p!=NULL)

{ printf(\ %.2f\\n\e5,p->sum,p->aver); p=p->next; }

system(\ }

/*-------------------------------------write-------------------------------------------*/ void write(struct student *head) {

struct student *p; p=head;

if(head!=NULL) {

while(p!=NULL) {

fwrite(p,LEN,1,fp); p=p->next; } }

printf(\文件更新成功!\\n\ fclose(fp);

system(\ system(\}

/*-------------------------------------read将文件数据读入一个新链表中-------------------------------------------*/ struct student *read(void) {

struct student *head; struct student *p1,*p2; head=NULL; p1=NEW;

16

将数据存入文件

rewind(fp);//指向文件头

fread(p1,LEN,1,fp); while(!feof(fp)) {

if(head==NULL) head=p1; else

p2->next=p1; p2=p1; p1=NEW;

fread(p1,LEN,1,fp); }

p2->next=NULL; fclose(fp); return(head); }

void find(struct student *head)/* 查询功能 */ { int t,s,i,j;

struct student *p,*q;

char x[10],y[2]={\ char k,f; p=head;

printf(\精确查找:\\n *1 按姓名查找\\n *2 按学号查找\\n 模糊查找\\n *3 按姓氏查找:\\n *4 按性别查找\\n\ scanf(\ k=getchar(); if(s==1)

{printf(\请输入姓名:\ gets(x);

while (p!=NULL) {

if (strcmp(x,p->name)==0)

{ printf(\学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分\\n\

17

printf(\

%.2f\\n\ore5,p->sum,p->aver); j=1;} else i=1; q=p;p=p->next; } }

else if(s==2)

{printf(\按学号查找:\\n\ scanf(\

while (p!=NULL) {

if (t==p->num)

{ printf(\学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分\\n\

printf(\ %.2f\\n\ore5,p->sum,p->aver); j=1;}

else i=1; q=p;p=p->next; } }

else if(s==3)

{ printf(\按姓氏查询:\\n\ gets(c);

while ( p!=NULL)

{

if (strncmp(c,p->name,1)==0)

{ printf(\学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分\\n\

printf(\ %.2f\\n\ore5,p->sum,p->aver);

18

j=1;}

else i=1;

q=p;p=p->next; } }

else if(s==4)

{ printf(\按性别查询:\\n\ f=getchar(); while(p!=NULL) { if(f==p->sex)

{ printf(\学号 姓名 性别 c语言 高数 大学语文 汇编语言 中近史 总分 平均分\\n\

printf(\ %.2f\\n\,p->sum,p->aver); j=1;} else i=1;

q=p;p=p->next; }

}

if(i=1&&j!=1)

printf(\输入错误\\n\

system(\ system(\}

struct student *delstudent(struct student *head)/* 删除功能 */ { int s,n,m=1; char c;

struct student *p,*q; char x[10]; while(m)

{printf(\按学号删除\\n *2 按姓名删除\\n\ scanf(\

c=getchar();

printf(\已有信息如下:\\n\

19

prlist(head);

if (head==NULL)

{ printf(\ return head; } p=head; switch(s) { case 2:

{ printf(\请输入姓名:\ gets(x);

while (strcmp(x,p->name)!=0 && p->next!=NULL) { q=p;p=p->next;}

if (strcmp(x,p->name)==0)

{ if (p==head)

head=p->next; else

q->next=p->next;

free(p); }

else

{printf(\ };m=0;break; case 1:

{ printf(\请输入学号:\ scanf(\ c=getchar();

while (n!=p->num && p->next!=NULL) { q=p;p=p->next;} if (n==p->num)

{ if (p==head)

head=p->next; else

q->next=p->next;

free(p); } else

{printf(\

20

};m=0;break;

default: printf(\输入错误\\n\

} }

return head; }

void about()/* 关于我们 */ { system(\

printf(\∩_∞ , ∩_ ∩\\n\\n\

printf(\●. ●) (●﹏●)\\n\\n\printf(\▓\\ /█\\ Hi\\n\\n\

printf(\成员介绍\\n\\n\ printf(\组长:\\n\\n\

printf(\组员:\\n\\n\ printf(\组员:\\n\\n\ printf(\组员:\\n\\n\ printf(\产品信息\\n\\n\

printf(\一.产品用途:主要用于学生成绩管理与查询.\\n\\n\ printf(\二.班级成绩管理系统主要包括:数据的录入 \\n\\n\ printf(\读取 显示 删除 插入 查找 修改 排名.\\n\\n\

system(\ system(\

}

void end() /*退出系统*/ {

char s;

printf(\是否退出系统Y/N?\\n\scanf(\

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

21

exit(0);

else if(s=='N' || s=='n') return; else {

printf(\输入错误,请重新输入\\n\\n\ } }

struct student *insert(struct student *head, struct student *op){ struct student *p,*q; if (head==NULL)

{ head=op; /* 空表时,插入结点 */ op->next=NULL; }

else

{ p=head;

while (op->num > p->num && p->next!=NULL) { q=p;p=q->next; } if (op->num==p->num)

{ printf(\该学号已存在,无法插入!\\n\

return head; }

else if(op->numnum) { if (p==head)

head=op; /* 在表头插入结点 */ else

q->next=op; /* 在表中间插入结点 */ op->next=p; } else

{ p->next=op; /* 在表尾插入结点 */ op->next=NULL; } }

return head;

}

struct student *xiugai(struct student *head)/*修改功能*/ {

22

/* 插入功能 */

struct student *op=NEW;

int c;

head=delstudent(head); printf(\请输入新名字:\ gets(op->name);

printf(\请输入新学号:\ scanf(\ c=getchar();

printf(\请输入新性别:\ scanf(\

printf(\请输入新C语言成绩:\ scanf(\

printf(\请输入新高数成绩:\ scanf(\

printf(\请输入新大学语文成绩:\ scanf(\

printf(\请输入新汇编成绩:\ scanf(\

printf(\请输入新中近史成绩:\ scanf(\

c=getchar();

op->sum=op->score1+op->score2+op->score3+op->score4+op->score5;

op->aver=(op->score1+op->score2+op->score3+op->score4+op->score5)/5.0; op->next=NULL;

head=insert(head,op);

return head; }

struct student *ca(struct student *head)/*插入功能*/ {

struct student *op=NEW; char c;

printf(\请输入名字:\ gets(op->name);

printf(\请输入学号:\scanf(\c=getchar();

23

printf(\请输入性别:\ scanf(\

printf(\请输入C语言成绩:\ scanf(\ printf(\请输入高数成绩:\ scanf(\

printf(\请输入大学语文成绩:\ scanf(\ printf(\请输入汇编成绩:\ scanf(\ printf(\请输入中近史成绩:\ scanf(\ c=getchar(); op->next=NULL;

head=insert(head,op);

op->sum=op->score1+op->score2+op->score3+op->score4+op->score5;

op->aver=(op->score1+op->score2+op->score3+op->score4+op->score5)/5.0; return head; }

void help()/* 软件说明 */

{ system(\

printf(\说明 \\n\\n\\n\

printf(\运行本软件需先使用新建文件或打开文件功能,否则运行出错。\\n\

printf(\每次使用修改 插入 删除等功能后需重新打开文件读取数据,\\n\

printf(\否则得到的数据是未保存的。每运行完一个功能会自动返回到 \\n\

printf(\ 主界面。 \\n\\n\\n\

printf(\ 纯属原创 禁止抄袭 \\n\\n\ system(\ system(\}

/*-------------------主函数 菜单--------------------------------------*/

24

int main()

{ system(\ char c,r;

struct student *head; int z; while(1) {

printf(\ printf(\· · · · · · · · ╔------------------------╗· · · · · · · · \\n\\n\ printf(\· · · · · · · · 欢迎使用学生成绩管理系统 · · · · · · · · \\n\\n\ printf(\· · · · · · · · ╚------------------------╝· · · · · · · · \\n\\n\ printf(\菜单***********************************\\n\\n\

printf(\======\\n\\n\

printf(\新建文件 ***** 2.打开文件 *******\

printf(\

printf(\修改功能 ***** 4.插入功能 *******\

printf(\

printf(\查询功能 ***** 6.删除功能 *******\

printf(\

printf(\排名功能 ***** 8.关于我们 *******\

printf(\

printf(\软件说明 ***** 0.退出系统 *******\

printf(\

printf(\请输入指令:\ scanf(\ c=getchar(); switch(z) {

case 1: printf(\请输入文件路径和新建文件名(如:d://123):\ scanf(\//---输入文件名,如d://123

if((fp=fopen(filename,\//W+先新建文件在写入数据

25

{

printf(\新建文件失败!\\n\ } else {

printf(\新建文件成功!\\n\ head=creat();write(head); };break;

case 2:printf(\读取文件数据\\n\

请输入读取的文件路径和文件名(如:d://123):\scanf(\/*---输入文件名,如d://123----*/ if((fp=fopen(filename,\//r+读文件 {

printf(\打开文件失败\\n\ }

else {

printf(\打开文件成功\\n\

head=read();system(\信息如下:\\n\prlist(head);system(\};break; case 3:head=xiugai(head);prlist(head);

printf(\是否保存Y/N?\\n\ if(r=='y'||r=='Y') {fp=fopen(filename,\

else {printf(\未保存\\n\ case 4:head=ca(head);prlist(head);

printf(\是否保存Y/N?\ if(r=='y'||r=='Y') {fp=fopen(filename,\ case 5:find(head);break;

case 6:head=delstudent(head);prlist(head);printf(\是

否保26

printf(\ c=getchar();

Y/N?\\n\

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

{fp=fopen(filename,\ else {printf(\未保\\n\

case 7:head=paixu(head);prlist(head);system(\ case 8:about();break; case 9:help();break; case 0:end();break;

default:printf(\输入错误,请重新输入\\n\ } }

return 0; }

5 总结

通过这次实验我们更好的掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体、链表等功能。通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,虽然在设计过程中遇到了不少问题麻烦,但在组长组员们的努力钻研,和教材数据的帮助下,完成了这次程序设计。

参考文献

27

本文来源:https://www.bwwdw.com/article/242r.html

Top