C语言成绩管理器_第1页
C语言成绩管理器_第2页
C语言成绩管理器_第3页
C语言成绩管理器_第4页
C语言成绩管理器_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计乐报雷

课程名称:学生信息管理系统

一、设计目的:

(1)本学期我们学习了C语言,由于初接触,学习有一定困难:于是学校给我们提供

一次巩固提高H勺机会--课程设计。该可程设i-规定学生既动手又动脑,自学,查

资料,独立实践。将本学期书本.上的理论知识和实际有机的结合起来,锻炼学生

实际分析问题和处理问题的能力,提高学生适应实际、实践编程日勺能力,使对C

语言系统编程有一种大体的理解。

(2)C语言的实践。掌握C语言函数H勺定义措施,函数的中明及函数H勺调用过程。掌握

构造体类型变量的定义和使用,综合应用C语言的知识,实现一种完整的系统,

提高编程能力,体会软件程序日勺开发过程。

二、总体设计

(1)程序设计构成框图

1输出功能:完毕所有学生记录日勺显示。

2查询功能:输入姓名可以查询学生日勺详细信息。

3增长功能:增长新学生的信息。

4删除功能:删除学生信息。

5修改功能:修改学生的错误信息。

6保留功能:保留已输入信息。

7读取功能:读取已输入信息。

8显示功能:按规定显示学生记录。

9排序功能:按规定完毕对学生信息的排序。

10退出系统。

(3)程序流程图

7,

主函数main()的调用

switch(choice)

{case1:OiitputInforiration();break;

case2:DesplayInfoBystudentName();break;

case3:p=MallocNode();GetInformation(p);InsertOneNode(p);break;

(5case4:DeleteNodeBystudentNumber();break;

(6)在设计过程中的感受:

首先通过一周口勺编程实习,并在后一段的汇报总结,我对C语言这门科有新日勺认识,

本人实在是获益不浅!要想编写一种精确、高效并有使用价值W、J程序,一定先要刈书本知识

熟悉,还要掌握必要的上机操作能力,写程序其实很轻易而关键在于调试程序。这次设计,

让我重新掌握了C语言,并且还得到了用C语言处理实际问题的宝贵经验。

另一方面,通过本次编程我也发现了自己在学习中的错误和局限性,复习了此前学过日勺

知识。同步也学到了某些没学过日勺知识,让我从中收益非浅,也为期末考试准备了一下!更

重要的是培养了独立思索问题和处理问题的能力,熟悉了某些基本操作和处理问题的措施!

第三,由于初次接触等原因本次设计碰到了许多问题,我深刻体会到老师发挥的重要作

用,C语言程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过

客,但在老师口勺协助卜我学会了怎样调试,怎样查找系统没有提醒打勺错误,最终终于排除万难

把程序搞定,体会到本来编程也挺故意思日勺快感.我想没有老师的协助我很难在短期内把程序

设计做的这样好,在此特地感谢老师的协助。

三、源程序清单

#include<stdio.h>

#include<conio.h>

#include<malloc.h>

#include<string.h>

typedefstructSTUDENT

(

charstudentNumber[10];/*学生学号*/

charstudentName[20];/*学生姓名*/

charclassName[20];/*班级名称*/

charyearName[20];/*学期名称*/

floatmarkl;/*第1门成绩*/

floatmark2;/*第2门成绩*/

floatmark3;/*第3门成绩*/

structSTUDENT木next;

}STUDENT;

STUDENT*headLink;/*链表表头指针*/

/*如下是函数申明*/

voidReadlnfoFormFile(void);

voidDesplayMenu(void);

voidCreateHeadLink(void);

STUDENT*MallocNode(void);

voidGetInformation(STUDENT*t);

voidOutputinformation(void);

voidDesplaylnfoBystudentName(void);

voidDesplayOneNode(STUDENT*t);

voidInsertOneNode(STUDENT*t);

voidDeleteNodeBystudentNumber(void);

voidChangeMarkByName(void);

voidChangeMarkByNumber(void);

voidSaveLinkToFi1e(void);

voidDesplayMarkSegment(void);

voidCompositorByTotalMark(void);

intchoose;/*用于接受顾客时选择*/

/*主函数*/

voidmain()

(

CreateHeadLink();

ReadlnfoFormFile();

DesplayMenuO;

)

函数功能:从文献中读学生信息到链表中

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

voidReadlnfoFormFile(void)

FILE*fp;

STUDENT*p;

fp二fopen("student,txt*,"r");

if(!fp)

printf("文献不存在\n");

return;

)

p=MallocNode();

while(fscanf(fp,p->studentNumber,p->studentName,p->cl

assName,&(p->markl),&(p->mark2),&(p->mark3))>0)

InsertOneNode(p);

p=MallocNode();

)

fclose(fp);

)

函数功能:显示菜单,根据顾客时输入

完毕对应的功能

voidDesplayMenu(void)

STUDENT*p;

printfC------请选择对应功能------------\n\n");

printfCl1按班级输出学生成绩单|\n");

printfCl2按姓名查询|\n〃);

printfCl3增长学生|\n");

printfCl4删除学生|\n0;

printfCl5按班级修改学生成绩I\n);

printfCl6按学期修改学生成绩|\n〃);

printfCl7保留所有学生信息|\n);

printf(*|8显示不及格学生成绩|\n");

printfCl9按平均成绩排序并输出绩|\rT);

printf("|10退出|\n\n*);

scanf&choose);/*获得顾客时选择*/

switch(choose)

case1:

OutputInformation();/*显示所有学生的信息*/

break;

case2:

DesplaylnfoBystudentName();

break;

case3:

p=MallocNode();/*先申请一种新结点*/

Getlnformation(p);/*规定顾客输入信息到新结点中*/

InsertOneNode(p);/*将新结点加到链表中*/

break;

case4:

DeleteNodeBystudentNumber();/*根据顾客输入的学号删除该学生*/

break;

case5:

ChangeMarkByName();/*根据顾客输入的姓名修改学生成绩*/

break;

case6:

ChangeMarkByNumber();/*根据顾客输入的学号修改学生成绩*/

break;

case7:

SaveLinkToFileO;/*保留数据*/

break;

case8:

DesplayMarkSegment();/*显示不及格的学生成绩*/

break;

case9:

CompositorByTotalMark();/*按平均成绩排序*/

break;

case10:

SaveLinkToFileO;/*保留数据后再退出*/

free(headLink);

exit(1);

break;

default:

break;

)

DesplayMenuO;/*递归调用*/

)

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

函数功能:建立链表表头

voidCreateHeadLink(void)

STUDENT*p;

p=(STUDENT*)malloc(sizeof(STUDENT));

headLink=p;

p->next=NULL;

)

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

函数功能:申请一种新结点,并将其初始化

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

STUDENT*MallocNode(void)

STUDENT*p;

inti;

p=(STUDENT*)malloc(sizeof(STUDENT));

if(p==NULL)

returnNULL;

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

p->studentNumber[i]=>\0';

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

p->studentName[i]=,\0';

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

p->className[i]=,\0J;

p->markl=0.0;

p->mark2=0.0;

p->mark3=0.0;

p->next=NULL;

returnp;

)

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

函数功能:获得顾客输入的学生信息

************************************!

voidGetInformation(STUDENT*t)

printf("请输入学生学号:\n");

scanft->studentNumber);

printf(”请输入学生姓名:\n");

scanf("%s”,t->studentName);

printf(〃请输入该生所在班级:\n〃);

scanft->className);

printf("请输入第1门成绩:\n");

scanf&(t->markl));

printf("请输入第2门成绩:\n");

scanf("%f”,&(t->mark2));

printf("请输入第3门成绩:\n");

scanf("%f”,&(t->mark3));

)

函数功能:在链表的结尾处增长一种结点

voidInsertOneNode(STUDENT*t)

STUDENT*p;

p=headLink;

while(p->next)

p=p->next;

)

p->next=t;

)

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

函数功能:根据顾客输入的学生姓名显示该学生的信息

voidDesplaylnfoBystudentName(void)

STUDENT*p;

charstudentName[20];

charflag=0;

p=headLink->next;

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

scanfstudentName);

while(p)

if(strcmp(p->studentName,studentName)=0)

printf(〃学号\t姓名\t班级\t成绩l\t成绩l\t成绩3\t总成绩\t平均成绩

\n\n");

DesplayOneNode(p);

flag=l;

break;

)

p=p->next;

)

if(Iflag)

printf("对不起,不存在姓名为%s的学生\n”,studentName);

)

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

函数功能:输出一种结点的信息

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

voidDesplayOneNode(STUDENT*t)

printft->studentNumber);

printf(^sXt*,t->studentName);

printft->className);

printf("%.2f\t*,t->markl);

printf("%.2f\t*,t->nark2);

printf("%.2f\t”,t->nark3);

printf("%.2f\t”,t->mark1+t->mark2+t->mark3);

printf("%.2f\t\n^,(t->markl+t->mark2+t->mark3)/3);

)

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

函数功能:根据顾客输入的学号删除该学生

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

voidDeleteNodeBystudentNumber(void)

charstudentNumber[10];

STUDENT*p,*q;

charflag=0;

printf("请输入要删除的学生学号:〃);

scanfstudentNumber);

p=headLink;

q=headLink->next;

while(q)

(

if(strcmp(q->studentNumber,studentNumber)=0)

p->next=q->next;

free(q);

flag=l;

break;

)

p=p->next;

q=q->next;

)

if(!flag)

(

printf(〃不存在该学号的学生\n〃);

return;

)

printf("成功删除\n");

)

函数功能:显示所有学生的信息

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

voidOutputinformation(void)

STUDENT*p;

p=headLink->next;

if(p==NULL)

printf(〃目前没有学生信息,请先输入学生信息\n\n〃);

return;

)

printf("学号\t姓名\t班级\t成绩l\t成绩l\t成绩3\t总成绩\t平均成绩

\n\n");

while(p)

(

DesplayOneNode(p);

p=p->next;

}

)

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

函数功能:根据输入的班级修改成绩

voidChangeMarkByName(void)

STUDENT*p;

inta;

charstudentName[20];

charflag=0;

floatmarkl,mark2,mark3;

p=headLink->next;

printf(〃请输入学生班级:\n");

scanf&a);

printf(“请输入学生姓名:\n");

scanfstudentName);

while(p)

(

if(strcmp(p->studentName,studentName)==0)

(

printf(〃请输入新的第1门成绩:\n〃);

scanf&markl);

printf("请输入新的第2门成绩:\n");

scanf("%f”,&mark2);

printf(”请输入新的第3门成绩:\n");

scanf("%f”,&mark3);

p->markl=markl;

p->mark2=mark2;

p->mark3=mark3;

flag=l;

printf("修改成功\n");

break;

)

p=p->next;

)

if(!flag)

printf("对不起,不存在班级为%s的学生\n”,studentName);

)

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

函数功能:根据输入的学期修改成绩

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

voidChangeMarkByNumber(void)

STUDENT*p;

intb;

charstudentNumber[20];

charflag=0;

floatmarkl,mark2,mark3;

p=headLink->next;

printf(〃请输入学生所在学期:\n");

scanf&b);

printf(”请输入学生学号:\n〃);

scanf("%s”,studentNumber);

while(p)

if(strcmp(p->studentNumber,studentNumber)==0)

printf("请输入新的第1门成绩:\n");

scanf&markl);

printf("请输入新的第2门成绩:\n");

scanf("%f”,&mark2);

printf(〃请输入新的第3门成绩:\n");

scanf("%f”,&mark3);

p->markl=markl;

p->mark2=mark2;

p->mark3=mark3;

flag=l;

printf("修改成功\n");

break;

)

p=p->next;

)

if(Iflag)

printf("对不起,不存在学期为%s的学生\n”,studentNumber);

)

函数功能:保留链表数据到文献中

voidSaveLinkToFi1e(void)

STUDENT*p;

FILE*fp;

p=headLink->next;

if(p==NULL)

printf("目前没有学生信息,请先输入学生信息\n\n〃);

return;

)

fp二fopen("student,txt","w+");

printf("文献不存在\iT);

return;

)

while(p)

fprintf(fp,*%s%s%s%f%f%f\n”,p->studentNumber,p->studentName,p->

className,p->markl,p->mark2,p->mark3);

p=p->next;

)

fclose(fp);

)

函数功能:不及格学生成绩

************************************!

voidDesplayMarkSegment(void)

STUDENT*p;

intcount=0;

p=headLink->next;

printf(“60分如下(不及格)的学生成绩如下:\n");

printf("学号\t姓名\t班级\t成绩l\t成绩l\t成绩3\t总成绩\t平均成绩

\n\n");

while(p)

if((6>((int)(p->markl/10)))||(6>((int)(p->mark2/10)))11(6>((int)(p->

mark3/10))))/*只要有一科不及格就认为该生不及格*/

count++;

DesplayOneNode(p);

)

p=p->next;

)

printf("不及格的学生一共有%d人\n”,count);

)

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论