| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖
标题:求助求助,学生管理系统学生信息排序问题
只看楼主 加入收藏
MuTTering
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-6-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
求助求助,学生管理系统学生信息排序问题
学生基本信息管理系统设计  (难易程度:中 )
(1) 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
(2) 系统提供以下功能:
a. 系统以菜单方式工作
b. 学生信息录入功能(学生信息用文件保存)---输入
c. 学生信息浏览功能---输出
d. 查询、排序功能---算法
   按学号查询,按姓名查询
e. 学生信息的删除与修改
搜索更多相关主题的帖子: 学号查询 管理系统 信息 电话 姓名 
2014-06-17 08:25
MuTTering
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-6-17
收藏
得分:0 
# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
using namespace std;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{//8
 public:
 char name[20];
 char Id[20];
 char age[20];
 char xb[2];
 char csny[20];
 char dz[100];
 char dh[15];
 char mail[20];  
 Student * Next;
 void Input()
 {//20
  printf("\t\t请输入学生的姓名:");  scanf("%s",&name);
  printf("\t\t请输入学生的学号:");  scanf("%s",&Id);
  printf("\t\t请输入学生的年龄:");  scanf("%s",&age);
  printf("\t\t请输入学生的性别:"); scanf("%s",&xb);
  printf("\t\t请输入学生的出生年月:");  scanf("%s",&csny);
  printf("\t\t请输入学生的家庭地址:"); scanf("%s",&dz);
  printf("\t\t请输入学生的电话:"); scanf("%s",&dh);
  printf("\t\t请输入学生的E-mail:"); scanf("%s",&mail);
 }
 void ReadFile(istream & in)
 {
  in>>name>>Id>>age>>xb>>csny>>dz>>dh>>mail;
 }
 void Show()
 {
  printf("姓名:");printf("%s\n",name);
  printf("学号:");printf("%s\n",Id);
  printf("年龄:");printf("%s\n",age);
  printf("性别:");printf("%s\n",xb);
  printf("出生年月:"); printf("%s\n",csny);//40
  printf("家庭地址:");printf("%s\n",dz);
  printf("电话:");printf("%s\n",dh);
  printf("E-mail:");printf("%s\n",mail);
 }
};

//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Studentmassage
{
 public:
 Studentmassage();
 ~Studentmassage();
 void ShowMenu();
 void Find();
 void Save();
 void ModifyItem();
 void RemoveItem();
 
 void Sort();
 //void Unpass();//60
 int ListCount();
 //void Average();
 void Display()
 {
  for(Student * p=Head->Next;p!=End;p=p->Next)
   p->Show();
  printf("输入任意字符!继续……");
  getch();
 }
 void AddItem()
 {
  End->Input();
  End->Next=new Student;
  End=End->Next;
  printf("添加成功!\n");
  printf("输入任意字符!继续……");
  getch();
 }
private:
 Student * Head,* End;//80
 ifstream in;
 ofstream out;
 Student *FindItem(char * name)
 {
  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->name,name))return p;
   return NULL;
 }
 Student *FindID(char * Id)
 {
  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->Id,Id))return p;
   return NULL;
 }
};

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
 Head=new Student;//100
 Head->Next=new Student;
 End=Head->Next;
 in.open("sort.txt");
 if(!in)
  printf("这是一个新系统,无学生信息。请先输入。\n");
 else
 {
  while(!in.eof())
  {
   End->ReadFile(in);
   if(End->name[0]=='\0')break;
   End->Next=new Student;
   End=End->Next;
  }
  in.close();
  printf("\t\t读取学生信息成功!");
 }
}
//120
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
 Save();
 for(Student * temp;Head->Next!=End;)
 {
  temp=Head->Next;
  Head->Next=Head->Next->Next;
  delete temp;
 }
 delete Head,End;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu()                  
{
  printf("********************************************************************************\n");
  printf("〓〓〓〓〓〓〓〓〓      学 生 基 本 信 息 管 理 系 统     〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓★★★★★         ★★★★★★★         ★★★★★〓〓〓〓〓〓〓\n");//140
  printf("〓〓〓〓〓〓〓〓〓★            1.增加学生信息          ★〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓〓〓★            2.查看学生信息          ★〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓〓〓★            3.排序统计学生信息     ★〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓〓〓★            4.查寻学生信息          ★〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓〓〓★            5.删除学生信息          ★〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓〓〓★            6.修改学生信息          ★〓〓〓〓〓〓〓〓〓\n");
  printf("〓〓〓〓〓〓〓〓〓★            0.安全退出系统          ★〓〓〓〓〓〓〓〓〓\n");
 
 printf("\n\t\t\n\t\t请选择:");
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Find()
{
 char name[20] ,Id[20];
 int x;
 Student * p=NULL;
 printf("\n\t\t*********************************\n");
 printf("\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找");
 printf("\n\t\t*********************************\n请选择:");//160
 scanf("%d",&x);
 switch(x)
 {
 case 1:{printf("\t\t请输入要查找的学生的姓名:");scanf("%s",&name);
  if(p=FindItem(name))
  {
   p->Next->Show();
   printf("输入任意字符!继续……");
   getch();
  }
  else
  {
   printf("\t\t没有找到该姓名的学生!\n\n");
   printf("输入任意字符!继续……");
   getch();
  }
     }break;
 case 2:
  {
   printf("\t\t请输入要查找的学生的学号:");scanf("%s",&Id);//180
   if(p=FindID(Id))
   {
    p->Next->Show();
    printf("输入任意字符!继续……");
    getch();
   }
   else
   {
    printf("\t\t没有找到该学号的学生!\n\n");
    printf("输入任意字符!继续……");
    getch();
   }
  }break;
 }
 
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ModifyItem()     //修改信息
{//200
 char name[20];
 Student * p=NULL;
 printf("\t\t请输入要修改的人的姓名:");scanf("%s",&name);
 if(p=FindItem(name))
 {
  printf("\t\t已找到学生的信息,请输入新的信息!\n");
  p->Next->Input();
  printf("修改成功!\n");
  printf("输入任意字符!继续……");
  getch();
 }
 else
 {
  printf("\t\t没有找到!\n");
  printf("输入任意字符!继续……");
  getch();
 }
}

//220﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::RemoveItem()         // 删除信息
{
 char name[20];
 Student * p=NULL,*temp=NULL;
 printf("\t\t请输入要删除的学生的姓名:\n");scanf("%s",&name);
 if(p=FindItem(name))
 {
  temp=p->Next;
  p->Next=p->Next->Next;
  delete temp;
  printf("\t\t删除成功!\n");
  printf("输入任意字符!继续……");
  getch();
 }
 else
 {
  printf("\t\t没有找到!\n");
     printf("输入任意字符!继续……");
  getch();
 }//240
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
 if( Head)
  return 0;
 int n=0;
 for(Student * p=Head->Next;p!=End;p=p->Next)
 {
  n++;
 }
 return n;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Sort()//对当前链表进行排序
{
 printf("Sorting...\n");
 Student *p=NULL,*p1=NULL,*k=NULL;
 int n=Studentmassage::ListCount();
 if(n<2)
  return;
 for(p=Head->Next;p!=End;p=p->Next)
  for(k=p->Next;k!=End;k=k->Next)
  {
   if(p->Id>k->Id)
   {
   
   }
  }
 printf("排序完成!\n");
 getch();
 return;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Save()
{
 out.open("sort.txt");
 for(Student *p=Head->Next;p!=End;p=p->Next)
  out<<p->name<<"\t"<<p->Id<<"\t"<<p->age<<"\t"
  <<p->xb<<"\t"<<p->csny<<"\t"<<p->dz<<p->dh<<p->mail<<'\n';
 out.close();
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
 int x,i=0;
 bool quit=false;
 printf("\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§§\n");
 for(i=0;i<3;i++)
  printf("\t\t◎\t\t\t\t\t\t    ◎\n");
printf("\t\t◎★★★★【 欢迎进入学生基本信息管理系统 】★★★★◎\n");
 for(i=0;i<3;i++)
  printf("\t\t◎\t\t\t\t\t\t    ◎\n");
 printf("\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§§\n");;
 Studentmassage Grade;
 printf("按任意键开始……");
  getch();
 while(!quit)
 {
  system("cls");
  Grade.ShowMenu();
  scanf("%d",&x);
  switch(x)
  {
  case 0:quit=true;break;
  case 1:Grade.AddItem();break;
  case 2:Grade.Display();break;
  case 3:Grade.Sort();break;
  case 4:Grade.Find();break;
  case 5:Grade.RemoveItem();break;
  case 6:Grade.ModifyItem();break;
  }
 }
 return 0;
}
2014-06-17 08:26
MuTTering
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-6-17
收藏
得分:0 
其他几个功能基本都实现了,但是排序功能怎么都弄不出来,求大神指点
2014-06-17 08:27
MuTTering
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-6-17
收藏
得分:0 
求助
2014-06-17 22:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
你没学过链表排序干嘛要用链表?

授人以渔,不授人以鱼。
2014-06-17 22:15
MuTTering
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-6-17
收藏
得分:0 
回复 5 楼 TonyDeng
百度查的综合各种的,我们C没学多少
2014-06-18 23:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没找到链表的排序算法,就不要用链表么。

授人以渔,不授人以鱼。
2014-06-19 07:47
快速回复:求助求助,学生管理系统学生信息排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021559 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved