- /*
- * Copyright (c) 2016, 烟台大学计算机与控制工程学院
- * All rights reserved。
- * 文件名称 :1.cpp
- * 作 者 :孟令群
- * 完成日期 :2017年7月1日
- * 版 本 号 :v1.0
- * 问题描述 :
- * 输出描述 :
- */
2.h
#ifndef TEST_H
#define TEST_H
struct Student
{
char name[10]; //姓名
int num; //学号
char xingbie[10]; //性别
int age; //年龄
int shengri; //出生年月
char address[10]; //地址
int phone; //电话
Student *next;
};
void StuSelect(Student *); //查找函数
void StuAlter(Student *); //修改函数
void StuInsert(Student *); //插入函数
void StuDelect(Student *); //删除函数
void StuFindErg(Student *head); //遍历函数
void StuFindNum(Student *head); //按学号查找函数,由查找函数调用
void StuOut(Student *p); //输出函数
void StuIm(Student *head,Student *p);//输入函数
void StuIn(Student *); //输入函数
void StuSave(Student *head); //存储函数
void StuInFile(Student *head); //学生成绩管理系统的文件输入函数,由输入函数调用
#endif
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
#include<string.h>
#include<string>
#include<fstream>
#include"conio.h"
#include "2.h"
using namespace std;
int j=0,q=0;//j表示学生总数,q用来判断学生学号重复
/**************************************/
/* 判断重复 */
/**************************************/
void 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->xingbie;
cout<<"学生年龄:";
cin>>p->age;
cout<<"学生出生年月:";
cin>>p->shengri;
cout<<"学生地址:";
cin>>p->address;
cout<<"学生电话:";
cin>>p->phone;
if(Opinion!=NULL)
{
for(int b=1;b<=j;b++)
{
if(Opinion->num==p->num) //对比学号
{
q=1;
cout<<"该学生已录入";
j--;
Sleep(1000);
break;
}
Opinion=Opinion->next;
}
}
}
/**************************************/
/* 输入函数 */
/**************************************/
void StuIn(Student *head)
{
if(head->next!=NULL)//判断头结点是否为空
{
cout<<"共有"<<j<<"名学生"<<endl;
cout<<"系统已存在信息。请转入插入系统!"<<endl;
Sleep(1000);
return ;
}
// Student *Opinion=(Student *)malloc(sizeof(Student)); //用于判断是否重复而定义
// Opinion=head->next;
Student *point=(Student *)malloc(sizeof(Student)); //
point->next=NULL;
int s=1;
while(s==1)
{
cout<<"共有"<<j<<"名学生"<<endl;
Student *p=(Student *)malloc(sizeof(Student));
p->next=NULL;
StuIm(head,p);
if(q!=1)
{
if(head->next==NULL)
{
head->next=p;
point=p;
}
else
{
point->next=p;
point=p;
}
}
j++;
cout<<"是否继续: 1 是,2 否 "<<endl;
cin>>s;
}
}
/**************************************/
/* 查找函数 */
/**************************************/
void StuSelect(Student *head)
{
int s=1; //判断函数是否继续进行
int num;
while(s!=2)
{
system("cls");
cout<<" 查找学生信息系统 "<<endl;
cout<<" 【1】 全部学生信息列表"<<endl;
cout<<" 【2】 学号查找学生信息"<<endl;
cout<<" 【3】 退出 "<<endl;
cin>>num;
switch(num)
{
case 1:
StuFindErg(head); //遍历函数
break;
case 2:
StuFindNum(head); //查找函数
break;
default:
s=2;
break;
}
}
}
/**************************************/
/* 遍历函数 */
/**************************************/
void StuFindErg(Student *head) //遍历函数,由查找函数调用
{
Student *p=(Student *)malloc(sizeof(Student));
p=head->next;
int i=1;
while(p!=NULL)
{
cout<<"第"<<i<<"位学生的信息:"<<endl;
StuOut(p);
cout<<endl;
p=p->next;
i++;
}
cout<<"按任意键退出"<<endl;
getch();
}
/**************************************/
/* 查找子函数 */
/**************************************/
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);
cout<<endl;
i++;
}
p=p->next;
}
if(i==1)
cout<<"没有该学生的信息,请检查输入是否正确!"<<endl;
cout<<"按任意键退出"<<endl;
getch();
}
/**************************************/
/* 输出函数 */
/**************************************/
void StuOut(Student *p) //输出函数,将链表某个节点的信息输出
{
cout<<"学生姓名:";
cout<<p->name;
cout<<"学生学号:";
cout<<p->num;
cout<<"学生性别:";
cout<<p->xingbie;
cout<<"学生年龄:";
cout<<p->age;
cout<<"学生出生年月:";
cout<<p->shengri;
cout<<"学生地址:";
cout<<p->address;
cout<<"学生电话:";
cout<<p->phone;
}
/**************************************/
/* 修改函数 */
/**************************************/
void StuAlter(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);
cout<<endl;
printf("输入修改信息:\n");
cout<<"学生姓名:";
cin>>p->name;
cout<<"学生学号:";
cout<<p->num<<endl;
cout<<"学生性别:";
cin>>p->xingbie;
cout<<"学生年龄:";
cin>>p->age;
cout<<"学生出生年月:";
cin>>p->shengri;
cout<<"学生地址:";
cin>>p->address;
cout<<"学生电话:";
cin>>p->phone;
printf("修改成功\n");
Sleep(1000);
i++;
}
p=p->next;
}
if(i==1)
cout<<"没有该学生的信息,请检查输入是否正确!"<<endl;
cout<<"按任意键退出"<<endl;
getch();
}
/**************************************/
/* 插入函数 */
/**************************************/
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】 从头插入学生信息 "<<endl;
cout<<" 【2】 从后插入学生信息 "<<endl;
cout<<" 【3】 退出插入学生信息系统"<<endl;
cin>>num;
Student *p=(Student *)malloc(sizeof(Student));
switch(num)
{
case 1:
StuIm(head,p); //查重
if(q==1)
{
j++;
cout<<"插入失败"<<endl;
break;
}
p->next=head->next; //头插
head->next=p;
cout<<"插入成功!"<<endl;
Sleep(1000);
break;
case 2:
StuIm(head,p);
if(q==1)
{
j++;
cout<<"插入失败"<<endl;
break;
}
point->next=p; //尾插
p->next=NULL;
cout<<"插入成功!"<<endl;
Sleep(1000);
break;
default:
s=2;
break;
}
}
}
/**************************************/
/* 删除函数 */
/**************************************/
void StuDelect(Student *head) //删除函数,由主函数调用
{
int num;
cout<<"输入想要删除学生的学生号:";
cin>>num;
Student *p=(Student *)malloc(sizeof(Student));
p->next=head->next;
int i=1;
while(p->next!=NULL)
{
if(num==p->next->num)
{
StuOut(p->next);
cout<<"是否删除:1 是,2 否 ";
cin>>i;
if(num==head->next->num) //如果为头结点
{
head->next=head->next->next;
}
else
{
p->next=p->next->next;
}
i=2;
j--;
cout<<"删除成功!"<<endl;
Sleep(1000);
break;
}
p=p->next;
}
if(i==1)
cout<<"没有该学生信息"<<endl;
Sleep(1000);
}
/**************************************/
/* 存储函数 */
/**************************************/
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;
Sleep(1000);
return;
}
cout<<"存储成功!"<<endl;
Sleep(1000);
while(p!=NULL)
{
fwrite(p,sizeof(Student),1,fp);
p=p->next;
}
ofstream out("d.txt",ios::out);
out<<j<<endl;
fclose(fp);
out.close();
}
/**************************************/
/* 文件输入函数 */
/**************************************/
void StuInFile(Student *head) //学生成绩管理系统的文件输入函数,由输入函数调用
{
char filename[10];
if(head->next!=NULL)
{
cout<<"系统已存在信息。请转入插入系统!"<<endl;
Sleep(1000);
return ;
}
FILE *fp;
cout<<"请输入文件路径(例如C:\\text.txt)";
cin>>filename;
if((fp=fopen(filename,"r"))==NULL)
{
cout<<"不能打开文件,请检查是否正确!"<<endl;
Sleep(1000);
return;
}
Student *point=(Student *)malloc(sizeof(Student));
//while(!feof(fp))
ifstream in("d.txt",ios::in);
in>>j;
/*cout<<j;
Sleep(2000);*/
int c=0;
for(c=1;c<=j;c++)
{
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;
}
}
cout<<"传输成功!"<<endl;
Sleep(1000);
fclose(fp);
in.close();
}
4.cpp
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
#include<string.h>
#include<fstream>
#include"conio.h"
#include "2.h"
using namespace std;
int main()
{
int num=1;
Student *head;
head=(Student *)malloc(sizeof(Student)); //chuan
head->next=NULL;
while(num!=8)
{
system("cls");
cout<<" 欢迎使用学生信息管理系统 "<<endl;
cout<<" 请输入你要使用的业务代码 "<<endl;
cout<<" 【1】 输入学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【2】 查找学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【3】 修改学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【4】 插入学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【5】 删除学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【6】 保存学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【7】 读入学生信息 "<<endl;
cout<<""<<endl;
cout<<" 【8】 退出学生管理系统 "<<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:
StuInFile(head);
break;
case 8:
cout<<"欢迎下次使用^-^"<<endl;
Sleep(1000);
exit(0);
break;
default:
cout<<"请输入正确的业务序号"<<endl;
Sleep(1000);
break;
}
};
return 0;
}
运行结果: