数据结构课程设计-学生信息管理系统

/*        
 *          烟台大学计算机与控制工程学院       
 *文件名称:mian.cpp       
 *作    者:王旭       
 *完成日期:2015年12月25日       
 *版 本 号:v1.0     
 *       
 *问题描述:学生信息管理系统 
 *            
 *输入描述:无
 *程序输出:无
 */  


main.cpp:

#include<stdio.h>
#include<iostream>
#include<malloc.h>
#include<string.h>
#include"student.h"
#include<stdlib.h>
#include<windows.h>
using namespace std;
int main()         //方便后面调用各种函数,多加了一层函数
{
    Welcome();
}

void Welcome()
{
	int num=1;
	Student *head;
	head=(Student *)malloc(sizeof(Student)); //chuan
	head->next=NULL;
	while(num!=7)
	{
	    system("cls");
        cout<<"              ***************欢迎使用学生信息管理系统************"<<endl;
        cout<<"              ***************请输入你要使用的业务代码************"<<endl;
        cout<<"              ***********  1 输入  2 查找  3 修改    ************"<<endl;
	    cout<<"              ***********      4 插入  5 删除        ************"<<endl;
        cout<<"              ***********      6 保存  7 退出        ************"<<endl;
        cin>>num;
	    switch(num)
	    {
            case 1:
                StuIn(head);  //输入学生信息
		        break;
	        case 2:
		        StuSelect(head); //查找学生信息
		        break;
	        case 3:
		        StuAlter(head);  //修改学生信息
		        break;
	        case 4:
		        StuInsert(head); //插入学生信息   (包括头插、尾插)
		        break;
	        case 5:
		        StuDelect(head); //删除学生信息
		        break;
	        case 6:
                StuSave(head);   //保存学生信息
		        break;
            case 7:
                cout<<"欢迎下次使用^-^"<<endl;
                Sleep(1000);
                exit(0);
		        break;
	        default:
	            cout<<"输入正确地业务序号(⊙o⊙)"<<endl;
		        break;
        }

    };
}






student.cpp

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<malloc.h>
#include<string.h>
#include"student.h"
using namespace std;

void StuInHand(Student *head);    //手动输入,由输入函数调用
void StuInFile(Student *head);    //文件输入,由输入函数调用
void StuIn(Student *);            //输入函数,由主函数调用
void Sleep();                     //程序等待一秒
void StuIn(Student *head)         //输入函数,由主函数调用
{
	int num;
	system("cls");
	while(num!=3)
	{
    cout<<"              *******************请选择输入方式******************"<<endl;
    cout<<"              **    1   手动输入     2 文件输入     3 退出     **"<<endl;
    cout<<"              ***************************************************"<<endl;
	cin>>num;
	    switch(num)
	    {
        case 1:
		     StuInHand(head);     //调用手动输入函数
		     break;
	    case 2:
		     StuInFile(head);     //调用文件输入函数
             break;
        case 3:
             system("cls");       //清屏,重新回到Wlcome
		     Welcome;             //退出输入界面,返回Welcome
		     break;
	    default:
		     cout<<"输入正确的业务代码";
		     break;
	    }
	}
}

void StuSelect(Student *head)  //查找函数,由主函数调用
{
    int s=1;                          //判断函数是否继续进行
	int num;
	while(s!=2)
	{
        cout<<"              ***********************查找系统********************"<<endl;
        cout<<"              **********  1  遍历  2 学号查找    3 退出 *********"<<endl;
        cout<<"              ***************************************************"<<endl;
	    cin>>num;
        switch(num)
	    {
            case 1:
                StuFindErg(head);
		        break;
     	    case 2:
                StuFindNum(head);
		        break;
	        default:
		        s=2;
		        break;
	    }
	}
}


void StuAlter(Student *head)   //修改函数,由主函数调用
{
        int num;
	    cout<<"输入想要查找学生的学生号:";
        cin>>num;
		char Sub[10];
	    cout<<"输入想要查找科目:";
        cin>>Sub;
        Student *p=(Student *)malloc(sizeof(Student));
		p=head->next;
		int i=1;
		while(p!=NULL)
		{
			if(num==p->num&&!strcmp(Sub,p->subject))
			{
		       printf("输入修改成绩:\n");
			   scanf("%d",&p->score);
			   printf("修改成功\n");
			   Sleep(1000);
			   i++;
			}
			   p=p->next;

		}
}


void StuInsert(Student *head)  //插入函数,由主函数调用
{
    Student *point=(Student *)malloc(sizeof(Student));
    point=head->next;
    while(point->next!=NULL)
        point=point->next;
    int s=1;
    int num;
    while(s!=2)
    {
        cout<<"              **********************插入系统*********************"<<endl;
        cout<<"              ****      1  头插       2 尾插       3 退出    ****"<<endl;
        cout<<"              ***************************************************"<<endl;
        cin>>num;
        Student *p=(Student *)malloc(sizeof(Student));
        switch(num)
        {
        case 1:
            StuIm(head,p);
            p->next=head->next;
            head->next=p;
            cout<<"插入成功!"<<endl;
            break;
        case 2:
            StuIm(head,p);
            point->next=p;
            p->next=NULL;
            cout<<"插入成功!"<<endl;
            break;
        default:
            s=2;
            break;
        }
    }
}

void StuDelect(Student *head)  //删除函数,由主函数调用
{
    int num;
    char sub[10];
    cout<<"输入想要删除学生的学生号:";
    cin>>num;
    cout<<"输入想要删除科目:";
    cin>>sub;
    Student *p=(Student *)malloc(sizeof(Student));
    p->next=head->next;
    int i=1;
    while(p->next!=NULL)
    {
        if(num==p->next->num&&!strcmp(sub,p->next->subject))
        {
            StuOut(p->next);
            cout<<"是否删除:1 是,2 否     ";
            cin>>i;
            if(num==head->next->num&&!strcmp(sub,head->next->subject))
            {
                head->next=head->next->next;
            }
            else
            {
			    p->next=p->next->next;
            }
            i=2;
            cout<<"删除成功!"<<endl;
            break;
        }
        p=p->next;
    }
    if(i==1)
    cout<<"没有该学生信息"<<endl;
}


information.cpp

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<malloc.h>
#include<string.h>
#include"student.h"
using namespace std;
void StuInFile(Student *head)    //学生成绩管理系统的文件输入函数,由输入函数调用
{
    char filename[10];
    if(head->next!=NULL)
    {
        cout<<"系统已存在信息。请转入插入系统!"<<endl;
        return ;
    }
    FILE *fp;
    cout<<"请输入文件路径(例如C:\text.txt)";
    cin>>filename;
    if((fp=fopen(filename,"r"))==NULL)
    {
        cout<<"不能打开文件,请检查是否正确!"<<endl;
        return;
    }
    Student *point=(Student *)malloc(sizeof(Student));
    while(!feof(fp)) {
    Student *p=(Student *)malloc(sizeof(Student));
    p->next=NULL;
    fread(p,sizeof(Student),1,fp);
    if(head->next==NULL)
    {
        head->next=p;
        point=p;
    }
    else
    {
        point->next=p;
        point=p;
    }
};
    fclose(fp);
    cout<<"传输成功!"<<endl;
}

void StuSave(Student *head)    //存储函数,由主函数调用
{
        FILE *fp;
		char filename[10];
		cout<<"请输入存储的文件名(例如:C:\text.txt):";
		cin>>filename;
		Student *p=(Student *)malloc(sizeof(Student));
		p=head->next;
		if((fp=fopen(filename,"w"))==NULL)
		 {
             cout<<"找不到该文件!"<<endl;
             return;
         }
        cout<<"存储成功!"<<endl;
        while(p!=NULL)
        {
             fwrite(p,sizeof(Student),1,fp);
		     p=p->next;
		 }
    fclose(fp);
}

In_Out.cpp

#include<stdio.h>
#include<iostream>
#include<malloc.h>
#include<string.h>
#include"student.h"
#include<stdlib.h>
using namespace std;
void StuOut(Student *p)           //输出函数,将链表某个节点的信息输出
{
    cout<<"学生姓名:";
    cout<<p->name;
    cout<<"学生学号:";
    cout<<p->num;
    cout<<"考试科目:";
    cout<<p->subject;
    cout<<"科目成绩";
    cout<<p->score<<endl;
}
int StuIm(Student *head,Student *p)
{
    Student *Opinion=(Student *)malloc(sizeof(Student));         //用来判断输入节点中学生号是否有重复
    Opinion=head->next;
    cout<<"学生姓名:";
    cin>>p->name;
    cout<<"学生学号:";
    cin>>p->num;
    cout<<"考试科目:";
    cin>>p->subject;
    if(Opinion!=NULL)
    {
        if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->subject))
        {
            cout<<"该学生该科目已有成绩";
            return 1;
        }
        Opinion=Opinion->next;
    }

    cout<<"学生成绩:";
    cin>>p->score;

    return 0;
}


void StuInHand(Student *head)   //手动输入函数,由输入函数调用
{
      if(head->next==NULL)
	  {
	       Student *point=(Student *)malloc(sizeof(Student));
		   point->next=NULL;
		   int s=1;
		   while(s==1)
		   {
		       Student *p=(Student *)malloc(sizeof(Student));
			   p->next=NULL;
               StuIm(head,p);
			   if(head->next==NULL)
			   {
				   head->next=p;
			       point=p;
			   }
			   else
			   {
			       point->next=p;
				   point=p;
			   }
			   cout<<"是否继续: 1 是,2 否    ";
			   cin>>s;
		   }
	  }
      else
	     {
	         cout<<"系统已存在信息,请转插入系统";
             system("cls");
	     }
}

Find.cpp

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<malloc.h>
#include<string.h>
#include"student.h"
using namespace std;
void StuFindErg(Student *head)    //遍历函数,由查找函数调用
{
        Student *p=(Student *)malloc(sizeof(Student));
		p=head->next;
		int i=1;
		while(p!=NULL)
		{
			   cout<<"第"<<i<<"位学生的信息:"<<endl;
		       StuOut(p);
			   p=p->next;
			   i++;
		}
}
void StuFindNum(Student *head)   //查找子函数,由查找函数调用
{
	    int num;
	    cout<<"请输入要查找的学生的学号:";
        cin>>num;
        Student *p=(Student *)malloc(sizeof(Student));
		p=head->next;
		int i=1;
		while(p!=NULL)
		{
			if(num==p->num)
			{
		       StuOut(p);
			   i++;
			}
			   p=p->next;
		}
		 if(i==1)
		 cout<<"没有该学生的信息,请检查输入是否正确!";
}

student.h

#ifndef TEST_H
#define TEST_H
struct Student
{
   char name[10];     //姓名
   char subject[10];  //科目
   int num;           //学号
   int score;         //科目分数
   char email[10];     //邮箱
   Student *next;
};

void Welcome();                     //欢迎界面函数,由main函数调用
void StuSelect(Student *);          //查找函数,由欢迎界面函数调用
void StuAlter(Student *);           //修改函数,由欢迎界面函数调用
void StuInsert(Student *);          //插入函数,由欢迎界面函数调用
void StuDelect(Student *);          //删除函数,由欢迎界面函数调用
void StuSave(Student *);            //存储函数,由欢迎界面函数调用
void StuFindErg(Student *head);     //遍历函数,由查找函数调用
void StuFindNum(Student *head);     //按学号查找函数,由查找函数调用
void StuOut(Student *p);            //输出函数
int StuIm(Student *head,Student *p);//输入函数
void StuIn(Student *);              //输入函数,由欢迎界面函数调用

#endif
程序运行截图

主界面


手动输入成绩


文件输入成绩


文件输入成功


修改成功



删除信息


修改成功


删除成功


退出界面


遍历查找



  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
学生成绩管理系统是一个用来管理学生的课程成绩的系统。它可以帮助学校或教育机构更加有效地管理学生的成绩信息。 这个成绩管理系统可以使用数据结构来存储和处理学生的成绩数据。我们可以使用数组、链表或树等数据结构来存储学生的信息,如学号、姓名、课程成绩等。通过使用适当的数据结构,我们可以方便地对学生的信息进行增删改查等操作。 在设计这个学生成绩管理系统时,可以使用面向对象的方法。学生可以看作是一个对象,具有一定的属性和行为。我们可以创建一个学生类,包含学生的基本信息,如学号、姓名等,以及一些方法来对学生成绩进行操作,如添加成绩、计算平均成绩等等。 另外,我们可以创建一个成绩管理类来管理学生的成绩信息。这个类可以包含一些方法来实现对学生成绩的管理,如添加学生、删除学生、查询学生等。我们还可以使用一些排序算法来对学生成绩进行排序,如冒泡排序、快速排序等,以便更好地展示学生的成绩情况。 在设计过程中,需要考虑一些特殊情况,如学生信息的重复录入、成绩的准确性等。为了解决这些问题,可以使用一些合适的算法和技术,如哈希表、正则表达式等。 总之,学生成绩管理系统需要使用合适的数据结构和算法来存储和处理学生的成绩数据,从而更好地管理学生成绩信息。通过使用myeclipse等开发工具,可以更加方便地实现这个系统的设计和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值