数据结构之学生成绩管理系统.docx

上传人:b****5 文档编号:3371694 上传时间:2022-11-22 格式:DOCX 页数:18 大小:25.18KB
下载 相关 举报
数据结构之学生成绩管理系统.docx_第1页
第1页 / 共18页
数据结构之学生成绩管理系统.docx_第2页
第2页 / 共18页
数据结构之学生成绩管理系统.docx_第3页
第3页 / 共18页
数据结构之学生成绩管理系统.docx_第4页
第4页 / 共18页
数据结构之学生成绩管理系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构之学生成绩管理系统.docx

《数据结构之学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构之学生成绩管理系统.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构之学生成绩管理系统.docx

数据结构之学生成绩管理系统

学生成绩管理系统

一、ﻩ实验目得

1、ﻩ通过此次课程设计中学生成绩管理系统得题目,掌握链表等数据结构得基本操作方面得知识,并能灵活得解决一些基本得问题,加深对其性质及各项操作得理解;

2、将所学数据结构方面得知识与一门具体得语言——C语言来进行实现,感受数据结构得强大作用,加深理解.

二、试验要求

管理系统中有五个要求:

输入 查找修改插入删除 存储

(1)输入要求:

能够通过键盘输入与文件输入两种

(2)查找要求:

能够根据学生号查找单个学生得信息,也可以遍历所有学生信息

(3)修改要求:

能够根据学生号修改单个学生所有信息

(4)插入要求:

能够实现头插与尾插

(5)删除要求:

能够根据学生号删除单个学生信息

(6)存储要求:

通过链表存储所有信息

三、算法得思想与算法实现步骤

1、ﻩ基本思想

ﻩ通过链表数据类型进行基本操作,主要有三个模块:

分别就是主函数模块、

主要操作函数及基本操作函数.

其中,主函数负责其她子函数得调用实现以及基本界面得操作

主要函数包括:

voidStuInput(Student*);//学生成绩管理系统得输入函数,由主函数调用

voidStuSelect(Student*);//学生成绩管理系统得查找函数,由主函数调用

voidStuAlter(Student*);//学生成绩管理系统得修改函数,由主函数调用

voidStuInsert(Student*); //学生成绩管理系统得插入函数,由主函数调用

voidStuDelect(Student*);//学生成绩管理系统得删除函数,由主函数调用

voidStuSave(Student *);//学生成绩管理系统得存储函数,由主函数调用

基本操作函数:

voidStuOutput(Student*p);    //输出函数

int StuImport(Student*head,Student*p);//输入函数

void StuInputHand(Student *head);  //学生成绩管理系统得手动输入函数,由输入函数调用

voidStuInput*head);  //学生成绩管理系统得文件输入函数,由输入函数调用

voidStuSelectErg(Student*head); //学生成绩管理系统得遍历函数,由查找函数调用

voidStuSelectNumFind(Student*head);//学生成绩管理系统得按学号查找函数,由查找函数调用

voidStuSelectSubFind(Student*head); //学生成绩管理系统得按科目查找函数,由查找函数调用

2、ﻩ实现步骤

首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等;

其次,针对上述得基本操作实现具体需要进行得操作,具体实现每个环节需要进行得基本操作,即具体编写每个小函数实现功能;

最后,编写主函数对每个实现进行按需调用,实现操作。

3、流程图

main

StuMain

StuInput

StuSelect

StuAlter

StuInsert

StuDelect

StuSave

StuInputHand

StuInputFile

StuSelectErg

StuSelectNumFind

StuSelectSubFind

四.代码:

#include

#include

#include〈string、h>

structStudent

{

 charname[10];

  char subject[10];

int num;

intgrade;

 Student*next;

};

voidStuMain();  //学生成绩管理系统得主函数,由main函数调用

voidStuInput(Student*);//学生成绩管理系统得输入函数,由主函数调用

voidStuSelect(Student*);//学生成绩管理系统得查找函数,由主函数调用

voidStuAlter(Student*); //学生成绩管理系统得修改函数,由主函数调用

voidStuInsert(Student *);//学生成绩管理系统得插入函数,由主函数调用

void StuDelect(Student*);//学生成绩管理系统得删除函数,由主函数调用

void StuSave(Student *); //学生成绩管理系统得存储函数,由主函数调用

void StuOutput(Student*p);  //输出函数

intStuImport(Student*head,Student*p);//输入函数

voidStuOutput(Student*p)     //打印函数,将链表得该节点信息输出

{

   printf("学生姓名:

”);

printf(”%s  ",p—>name);

printf(”学生号:

”);

ﻩprintf(”%d  ",p->num);

printf("科目:

");

ﻩprintf("%s ",p-〉subject);

ﻩprintf(”学生成绩:

");

ﻩprintf(”%d \n”,p-〉grade);

intStuImport(Student*head,Student*p)

Student*Opinion=(Student*)malloc(sizeof(Student));  //用来判断输入节点中学生号就是否有重复

ﻩOpinion=head-〉next;

    printf(”学生姓名:

\n”);

ﻩ scanf("%s”,p->name);

printf(”学生号:

\n");

ﻩscanf(”%d",&p—>num);

ﻩprintf("科目:

\n");

ﻩﻩscanf("%s”,p—〉subject);

ﻩif(Opinion!

=NULL)

ﻩ{

ﻩﻩif(Opinion-〉num==p-〉num&&!

strcmp(Opinion—〉subject,p->subject))

ﻩ{

ﻩprintf(”该学生这门科目已有成绩,请重新输入\n");

ﻩﻩreturn1;

ﻩ}

ﻩﻩOpinion=Opinion—>next;

ﻩ}

printf("学生成绩:

\n");

ﻩscanf(”%d",&p->grade);

ﻩreturn0;

}

void main()

{

   StuMain();

void StuMain()

{

 chardecide='y’;      //定义while变量,函数就是否继续进行

ﻩintnum=1;          //定义switch变量,函数跳转到哪个子函数

Student *head;    //定义链表得头指针

ﻩhead=(Student*)malloc(sizeof(Student));  //给头指针开辟空间

ﻩhead—〉next=NULL;    //初始化头指针      

while(decide!

=’n')

ﻩ{

 printf("***************************************************\n");

printf("**********1输入2查找 3修改4插入********\n");

printf("**********5 删除  6存储7退出   ********\n”);

printf(" ***************************************************\n");

  scanf("%d”,&num);

switch(num)

{

case1:

ﻩﻩ StuInput(head);

ﻩbreak;

 case2:

ﻩ StuSelect(head);

ﻩbreak;

case 3:

StuAlter(head);

  break;

ﻩcase4:

  StuInsert(head);

ﻩﻩbreak;

ﻩcase5:

ﻩ  StuDelect(head);

ﻩﻩ  break;

ﻩcase6:

  StuSave(head);

ﻩ break;

ﻩdefault:

ﻩﻩdecide='n’;

break;

ﻩ}

};

}

voidStuInputHand(Student*head); //学生成绩管理系统得手动输入函数,由输入函数调用

voidStuInput*head); //学生成绩管理系统得文件输入函数,由输入函数调用

void StuInput(Student*head)//学生成绩管理系统得输入函数,由主函数调用

{

 char decide=’y';     //定义while变量,函数就是否继续进行

ﻩintnum;       //定义switch变量,函数跳转到哪个子函数

ﻩwhile(decide!

=’n’)

ﻩ{

printf(" ***************************************************\n");

 printf(”**  1 手动输入2文件输入  3退出  **\n”);

  printf(”***************************************************\n”);

scanf("%d",&num);

switch(num)

{

case 1:

ﻩﻩStuInputHand(head);

ﻩﻩbreak;

case 2:

ﻩﻩStuInput);

ﻩdefault:

ﻩdecide=’n’;

ﻩﻩbreak;

ﻩ}

}

}

voidStuInputHand(Student*head)//学生成绩管理系统得手动输入函数,由输入函数调用

 if(head->next==NULL)

ﻩ{

 Student*point=(Student*)malloc(sizeof(Student));     //链表中最后一个节点,只在该函数中存在

ﻩ   point->next=NULL;

intdecide=1;

ﻩ   while(decide!

=0)

{

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

ﻩﻩ p->next=NULL;

   StuImport(head,p);

ﻩﻩif(head—>next==NULL)

 {

ﻩ head-〉next=p;

ﻩﻩ  point=p;

ﻩﻩ }

ﻩ  else

ﻩ  {

ﻩﻩ point-〉next=p;

ﻩﻩﻩﻩ point=p;

ﻩﻩ }

ﻩﻩﻩprintf("就是否继续:

1/0\n");

ﻩ   scanf("%d",&decide);

ﻩ }

 else

ﻩ  printf("管理系统中已存在信息,若想输入学生信息,请转插入子系统”);

}

voidStuInput*head) //学生成绩管理系统得文件输入函数,由输入函数调用

  if(head->next!

=NULL)

ﻩﻩ{

ﻩ  printf("学生管理系统中已有信息,请跳转到插入选项\n");

     return;

ﻩ}

ﻩﻩ  FILE*fp;

     printf("请输入文件名(包括物理地址)\n");

ﻩ  char [10];

ﻩﻩﻩscanf(”%s",);

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

ﻩ  {

ﻩ   printf("cannotopenfile\n"); 

ﻩ return; 

ﻩ}

ﻩﻩStudent *point=(Student*)malloc(sizeof(Student));

ﻩﻩStudent*Opinion=(Student*)malloc(sizeof(Student)); //用来判断输入节点中学生号就是否有重复

ﻩﻩwhile(!

feof(fp)){

ﻩOpinion=head->next;   

ﻩﻩStudent *p=(Student *)malloc(sizeof(Student));

ﻩﻩp-〉next=NULL;

  fread(p,sizeof(Student),1,fp);

ﻩﻩif(Opinion!

=NULL)

ﻩﻩﻩ {

ﻩ if(Opinion—>num==p—>num&&!

strcmp(Opinion->subject,p->subject))

{

ﻩﻩ  printf(”该文件中有重复学生信息,请验明再传输\n");

ﻩﻩﻩhead->next=NULL;

ﻩﻩreturn;

ﻩﻩﻩOpinion=Opinion—>next;

ﻩﻩ }

ﻩ if(head-〉next==NULL)

ﻩﻩﻩ{

ﻩﻩhead-〉next=p;

ﻩﻩ  point=p;

ﻩ}

ﻩﻩ else

ﻩﻩ  {

 point—〉next=p;

ﻩﻩpoint=p;

ﻩﻩﻩ }

ﻩ };

ﻩOpinion=head—>next;

ﻩﻩ while(Opinion-〉next!

=NULL)

ﻩﻩ {

ﻩOpinion=Opinion->next;

ﻩﻩ if(Opinion->next->next==NULL)

ﻩOpinion-〉next=NULL;

ﻩﻩ};

ﻩ fclose(fp);

printf("传输成功\n”);

voidStuSelectErg(Student *head);//学生成绩管理系统得遍历函数,由查找函数调用 

voidStuSelectNumFind(Student*head);//学生成绩管理系统得按学号查找函数,由查找函数调用

void StuSelectSubFind(Student*head); //学生成绩管理系统得按科目查找函数,由查找函数调用

voidStuSelect(Student *head) //学生成绩管理系统得查找函数,由主函数调用

{

 chardecide='y’;      //定义while变量,函数就是否继续进行

intnum;     //定义switch变量,函数跳转到哪个子函数

ﻩwhile(decide!

='n')

 printf(”***************************************************\n");

 printf(”**** 1 遍历  2 学号查找3 科目查找  4退出 ****\n");

  printf("***************************************************\n");

scanf("%d",&num);

switch(num)

ﻩ{

ﻩcase 1:

ﻩStuSelectErg(head);

ﻩﻩbreak;

ﻩcase 2:

ﻩStuSelectNumFind(head);

ﻩbreak;

case3:

 StuSelectSubFind(head);

ﻩﻩbreak;

ﻩdefault:

ﻩdecide=’n';

ﻩbreak;

}

}

voidStuSelectErg(Student*head)  //学生成绩管理系统得遍历函数,由查找函数调用

{

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

ﻩp=head-〉next;

ﻩint i=1;

ﻩwhile(p!

=NULL)

{   

ﻩﻩ  printf(”第%d位学生信息:

\n",i);

ﻩ  StuOutput(p);

ﻩﻩp=p->next;

ﻩ i++;

ﻩ}

voidStuSelectNumFind(Student*head) //学生成绩管理系统得查找子系统,有查找函数调用

{

ﻩintnum;

ﻩ  printf(”输入想要查找学生得学生号:

\n");

 scanf("%d",&num);

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

p=head-〉next;

int i=1;

ﻩwhile(p!

=NULL)

{ 

ﻩﻩﻩif(num==p—>num)

{

ﻩ StuOutput(p);

ﻩﻩi++;

ﻩ}

ﻩﻩp=p->next;

ﻩ}

ﻩif(i==1)

ﻩprintf("没有该学生信息");

}

voidStuSelectSubFind(Student*head)//学生成绩管理系统得按科目查找函数,由查找函数调用

charSub[10];

  printf(”输入想要查找科目:

\n");

  scanf(”%s”,Sub);

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

ﻩﻩp=head-〉next;

ﻩint i=1;

while(p!

=NULL)

ﻩﻩ{  

ﻩif(!

strcmp(Sub,p—>subject))

ﻩ{

ﻩ StuOutput(p);

ﻩﻩﻩi++;

ﻩ}

ﻩp=p—>next;

ﻩﻩ}

ﻩif(i==1)

printf(”没有该学生信息”);

void StuAlter(Student*head)//学生成绩管理系统得修改函数,由主函数调用

  intnum;

 printf("输入想要查找学生得学生号:

\n");

  scanf("%d",&num);

ﻩchar Sub[10];

ﻩ printf(”输入想要查找科目:

\n");

  scanf("%s",Sub);

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

p=head->next;

ﻩinti=1;

ﻩwhile(p!

=NULL)

ﻩ{ 

ﻩﻩﻩif(num==p->num&&!

strcmp(Sub,p—>subject))

ﻩﻩﻩ{

ﻩ printf("输入修改成绩:

\n”);

ﻩﻩﻩscanf("%d",&p-〉grade);

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

ﻩi++;

ﻩ}

ﻩﻩ  p=p—>next;

ﻩﻩ if(i==1)

ﻩ printf("没有该学生信息");

ﻩ}

voidStuInsert(Student*head)//学生成绩管理系统得插入函数,由主函数调用

  Student*point=(Student *)malloc(sizeof(Student));    

ﻩpoint=head->next;

ﻩﻩ while(point->next!

=NULL)

ﻩpoint=point—〉next; //找到尾结点

ﻩ chardecide=’y';  //定义while变量,函数就是否继续进行    

  ﻩ intnum;  //定义switch变量,函数跳转到哪个子函数

  while(decide!

=’n')

{

    printf(” ***************************************************\n");

    printf("****  1头插 2尾插  3 退出   ****\n");

  printf("***************************************************\n”);

    scanf("%d",&num);

ﻩﻩ Student *p=(Student*)malloc(sizeof(Student));

 switch(num)

ﻩﻩﻩ{

ﻩ   case1:

ﻩﻩ StuImport(head,p);

ﻩﻩ  p->next=head—>next;

ﻩ  head-〉next=p;

ﻩ printf("插入成功\n”);

break;

   case 2:

ﻩﻩ  StuImport(head,p);

point-〉next=p;

p->next=NULL;

 printf(”插入成功\n");

ﻩﻩ break;

   default:

  ﻩ decide=’n';

ﻩﻩ break;

ﻩﻩﻩ}

voidStuDelect(Student*head) //学生成绩管理系统得删除函数,由主函数调用

{

   int num;

ﻩ printf("输入想要删除学生得学生号:

\n");

 scanf("%d",&num);

charSub[10];

ﻩprintf("输入想要删除科目:

\n");

    scanf("%s”,Sub);

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

ﻩﻩp—>next=head->next;

inti=1;

ﻩﻩwhile(p->next!

=NULL)

ﻩ{     

ﻩif(num==p->next—>num&&!

strcmp(Sub,p-〉next—〉subject))

ﻩ{

ﻩﻩ StuOutput(p—>next);

ﻩﻩ printf(”就是否删除:

1/0\n");

ﻩscanf(”%d",&i);

ﻩif(n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1