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
/*---------------------------------------------------------*/ #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(\输入性别
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->num
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
正在阅读:
c语言课程设计学生成绩管理系统报告书04-03
参观扬州科技馆作文450字06-16
计算机网络试卷(AB卷)09-27
压浆安全技术交底01-19
食品药品监督管理行政执法机构办公业务用房建设指导意见01-26
十八大报告知识竞赛题含参考答案08-07
(完整版)医院财务科招聘考试题目含答案04-20
大连房地产市场概况 - 图文11-02
2019-201X年教师节横幅标语-word范文(2页)03-09
毕业季作文500字07-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 报告书
- 管理系统
- 成绩
- 语言
- 课程
- 学生
- 设计
- 生物化学复习资料 - 图文
- 王文珂
- 2017年度国家工作人员学法用法考试试题500题
- 国有企业改革文献综述
- 《我能行》编撰实施方案
- 绿色首都 - 莫斯科
- 高中数学第三章统计案例综合训练学案新人教A版选修23
- 绿色建筑工程监理实施细则
- 形成主体功能区战略的政策保障和政策衔接
- 八道河子镇宗教工作情况的
- MATLAB在导热问题中的应用
- 重庆市建筑工程计价定额2008(说明及计算规则)
- 微机原理及应用A试题库及答案
- 浅谈高中语文教学中落实“情感态度价值观”目标的策略-2019年教
- 全面建设小康社会的实施方案
- 全口义齿五因素十定律详解
- 儿童多动症主要有以下五大特征
- 宁夏师范学院思想政治理论课建设自查报告
- 数学建模 - 血液中葡萄糖浓度的稳定性问题
- 小企业管理案例分析题答题要点