这段程序谁给看一下啊,我怎么搞了半天搞不定啊,纠结了好久!
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip>
#define LEN sizeof(struct Student)
using namespace std;
struct Student
{
char Sno[10]; //学号
char Sname[20]; //姓名
char Ssex[10]; //性别
char Sclass[10]; //班级
Student *next;
};
int menu()
{
char c;
for(;c<'0'||c>'9';)
{
system("cls");
cout<<"************** 学生成绩管理系统 ************** "<<endl;
cout<<setw(15)<<" "<<"1.输入学生信息"<<endl;
cout<<setw(15)<<" "<<"2.输出学生信息"<<endl;
cout<<setw(15)<<" "<<"3.按学号排序排序"<<endl;
cout<<setw(15)<<" "<<"4.按学号查找"<<endl;
cout<<setw(15)<<" "<<"5.按姓名查"<<endl;
cout<<setw(15)<<" "<<"6.插入一条记录"<<endl;
cout<<setw(15)<<" "<<"7.删除一条记录"<<endl;
cout<<setw(15)<<" "<<"8.修改一条记录"<<endl;
cout<<setw(15)<<" "<<".将所有记录保存在文件中"<<endl;
cout<<setfill('*')<<setw(48)<<"*"<<endl;
//cout<<setw(15)<<" ";
cout<<"请选择(1-9):";
c=getchar();
}
return c;
}
Student *create(Student *head)//输入数据,创建链表;
{
int n;
Student *p1,*p2;//p1为当前节点;
int i;
cout<<"请输入学生的个数:"<<endl;
cin>>n;
cout<<" 请输入学号 姓名 性别 班级"<<endl;
//p2=head;
for(i=0;i<n;i++)
{
p1=(Student *)malloc(LEN);
//p2=(Student *)malloc(LEN);
cin>>p1->Sno;
cin>>p1->Sname;
cin>>p1->Ssex;
cin>>p1->Sclass;
p2->next=p1;
p2=p1;
p2->next=NULL;
/*if(i==0)
{
head=p2;
p1=head;
}
else
{
p2->next=p1;
}
p2->next=NULL;
p1=p2;*/
}
cout<<"输入结束!"<<endl;
return head;
}
/*****************输出函数**********************/
/********函数功能:将所有数据打印在屏幕上********/
Student *output(Student *head)
{
Student *p1,*p3;
cout<<"输出结果为:"<<endl;
p1=head;
p3=p1->next;
if(p3==NULL)
{
cout<<"表格为空,无法输出"<<endl;
}
while(p3!=NULL)
{
cout<<" "<<p1->Sno<<" "<<p1->Sname<<" "<<p1->Ssex<<" "<<p1->Sclass<<endl;
p1=p1->next;
}
return 0;
}
/*****************排序函数*********************/
/******函数功能:将所有数据按学号从小到大进行排序******/
Student *rank(Student *head)
{
Student *p1,*p2;
p1=head;
while(p1->next!=NULL)
{
if(strcmp(p1->Sno,p1->next->Sno)<0)
{
p1=p1->next;
}
else
{
p2=p1->next;
p1->next=p2->next;
}
}
return head;
}
Student *find_Sno(Student *head)//查找函数:按学号查询;
{
char num[10];
Student *p1;
cout<<"请输入要查找学生的学号:"<<endl;
cin>>num;
p1=head;
while(p1!=NULL)
{
if(strcmp(p1->Sno,num)==0)
{
cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"班级"<<endl;
cout<<" "<<p1->Sno<<" "<<p1->Sname<<" "<<p1->Ssex<<" "<<p1->Sclass<<endl;
return head;
}
else
{
p1=p1->next;
}
}
if(p1==NULL)
{
cout<<"要查询的数据不存在,请输入正确数值从新查找!"<<endl;
}
return 0;
}
Student *find_Sname(Student *head)//查找函数:按姓名查询;
{
char name[20];
Student *p1;
cout<<"请输入要查找学生的姓名:"<<endl;
cin>>name;
p1=head;
while(p1!=NULL)
{
if(strcmp(p1->Sname,name)==0)
{
cout<<"学号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"班级"<<endl;
cout<<" "<<p1->Sno<<" "<<p1->Sname<<" "<<p1->Ssex<<" "<<p1->Sclass<<endl;
return head;
}
else
{
p1=p1->next;
}
}
if(p1==NULL)
{
cout<<"要查询的数据不存在,请输入正确数值从新查找!"<<endl;
}
return 0;
}
/*********************插入函数***************************/
/******************* 函数功能:插入一条新的数据*************/
Student *insert(Student *head)
{
Student *p1,*p2,*p3;
p3=(Student *)malloc(LEN);
if(head==NULL)
{
head=p3;
head->next=NULL;
return head;
}
p1=head;
while(p1->next!=NULL)
{
if(p1->Sno<=p3->Sno)
{
p2=p1;
p1=p1->next;
}
else
{
p2->next=p3;
p3->next=p1;
}
}
if(p1->next==NULL)
{
if(strcmp(p1->Sno,p3->Sno)>0)
{
p3->next=p2->next;
p2->next=p3;
}
else
{
p1->next=p3;
p3->next=NULL;
}
}
return head;
}
/*********************删除函数***************************/
/******************* 函数功能:查找并删除一条数据*************/
Student *delet(Student *head)
{
Student *p1,*p2;
char num[10];
cout<<"请输入要删除的学生学号:"<<endl;
cin>>num;
if(head==NULL)
{
cout<<"数据表已空,无法删除!"<<endl;
}
p1=head;
while((p1->next!=NULL)&&(strcmp(p1->Sno,num)!=0))
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->Sno,num)==0)
{
if(strcmp(head->Sno,num)==0)
{
head=p1->next;
}
else
{
p2->next=p1->next;
free(p1);
cout<<"数据以删除"<<endl;
}
}
else
{
cout<<"找不到数据,无法删除!"<<endl;
}
return head;
}
/***********************修改函数********************/
/******************函数功能:修改一条数据******************/
Student *alter(Student *head)
{ char num[10];
cout<<"请输入要删除的学生学号:"<<endl;
cin>>num;
delet(head,num);
cout<<"请输入修改后的数据"<<endl;
insert(head);
return 0;
};
/***********************保存函数********************/
/***********函数功能:将所有数据出入一个文件中**********/
Student *savefile(Student *head)
{
FILE *fp;
Student *p1;
p1=head;
char file[30];//存放文件名及路径;
cout<<"请输入文件名及路径:"<<endl;
if((fp=fopen(file,"w+"))==NULL)
{
cout<<"不能打开文件:"<<endl;
return 0;
}
fprintf(fp,"学号 姓名 姓名 班级");
while(p1!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%s\n",p1->Sno,p1->Sname,p1->Ssex,p1->Sclass);
p1=p1->next;
}
fclose(fp);
cout<<"保存完毕"<<endl;
return 0;
}
/************主函数****************/
void main()
{
//cout<<"xuesheng"<<endl;
Student *head=0;
//create(head);
//output(head);
for(; ;)
{
switch(menu())
{
case 1:
create();
break;
case 2:
output(head);
break;
case 3:
rank(head);
break;
case 4:
find_Sno(head);
break;
case 5:
find_Sname(head);
break;
case 6:
insert(head);
break;
case 7:
delet(head);
break;
case 8:
alter(head);
break;
case 9:
savefile(head);
break;
}
}
}