注册 登录
编程论坛 C++教室

!重新修改了一下,,

天下第二刀 发布于 2007-03-23 22:08, 1437 次点击

才学时间不常,只为增加点信心兴趣,呵呵
可能会有很多问题,请多多指教了

#include <iomanip>
#include <iostream>
#include <fstream>
#include <vector>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <stdio.h>
using namespace std;

struct student
{
char name[10]; /// 姓名
char id[10]; /// 学号
float total; /// 总分
student *next;
};
//////////////////////////////////////////////////////////////

class stud
{
student *p1,*p2,*head;
public:

~stud() /////----析构函数------------------------
{

while(head)
{
p1=head->next;
delete head;
head=p1;
}
}
///-------------------------------------------------------------
void output(student *head); // 输出学生成绩
student * insert(student *head); // 增加学生记录
student* del(student *head, char*p); // 删除记录
int find(student *head,char *p) ; // 查找学生记录
student* stat(student *head); //排序统计函数
};

////////-----输出学生成绩-----------------/////////////////////
void stud::output (student *head)
{ p1=head;
if(head==NULL)
cout<<"对不起,这是空表,没有数据"<<endl;
while(p1!=NULL)
{
cout<<p1->name<<" "<<p1->id<<" "<<p1->total<<endl;
p1=p1->next ;
}
}
//////////-----------排序统计函数-----------/////////////////
student *stud::stat(student *head)
{
if(head==NULL)
{cout<<"错误,这还是一张空表"<<endl;
return head;
}

p2=head;
p1=p2->next;

while(p2->next) //冒泡泡法, 呵呵`~~~
{

if(p2->total > p1->total)
{ // 把头指针指向当前比较小的节点
p2->next=p1->next;
p1->next=head;
head=p1;

// 把用于比较的两个指针复位
p2=head;
p1=p2->next ;
}//----------------------------------------
else
{ // 指向下一个节点
p2=p2->next ;
p1=p2->next ;
}//-------------------------------------------

}
cout<<"按学生总分排序成功"<<endl;
return head;
}

/////-----------删除记录-----------//////////////////////
student* stud::del (student *head,char *p)
{
p1=head;
p2=NULL;
if(head==NULL)
{
cout<<"ERROR, 这是一个空表!!"<<endl;
return head;
}

while(strcmp(p1->name ,p)&& p1->next !=NULL)
{ p2=p1;
p1=p1->next ;
}

if(!strcmp(p1->name ,p))
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next ;

cout<<"删除成功,OK"<<endl;
delete p1;
}
else
cout<<" 没找到姓名"<<p<<"的学生.\n"; //结点没找到

return head ;
}

///////-------------查找函数----------///////////////////
int stud::find (student *head,char *p)
{
if(head ==NULL)
{
cout<<"错误,这是一张空表"<<endl; return 1;
}
p2=head;

while(strcmp(p2->name ,p) && p2->next !=NULL)
p2=p2->next ;
if(!strcmp(p2->name,p))
{
cout<<"姓名, 学号, 总分!!!"<<endl;
cout<<p2->name<<" "<<p2->id<<" "<<p2->total<<endl;
}
else
cout<<"对不起,没有您要查找学生的记录"<<endl;

return 0;
}

///////----------------增加学生记录-----------////////////////////////////
student *stud::insert (student *head)
{ p1=new student;
p2=head;
cout<<"姓名, 学号, 总分!!!"<<endl;
cin>>p1->name>>p1->id >>p1->total ;
if(head ==NULL)
{
head=p1;
p1->next =NULL;
return head;
}
while(p2->next !=NULL)
p2=p2->next;
p2->next=p1;
p1->next=NULL;

return head;
}

///////////////////------------main函数--------//////////////////-----------
int main(void)
{
stud stu;
student *head=NULL;
char choice;
char name[10];
while(1)
{ system("cls");
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃**************** 学生成绩管理系统主菜单界面 ****************** ┃";
cout<<"┃********** ★★★★★ ★★★★★★★ ★★★★★ *********** ┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃****************★ ①.增加学生成绩 ★****************┃";
cout<<"┃****************★ ②.显示学生成绩 ★****************┃";
cout<<"┃****************★ ③.排序统计成绩 ★****************┃";
cout<<"┃****************★ ④.查找学生成绩 ★****************┃";
cout<<"┃****************★ ⑤.删除学生成绩 ★****************┃";
cout<<"┃****************★ ⑥.安全退出系统 ★****************┃";
cout<<"┃ ┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<" 请输入您的选择(0--6):";cout<<endl;
cin>>choice; fflush(stdin);
if(choice=='6')
{ cout<<"谢谢使用,再见"<<endl;
exit(0);
}
switch(choice)
{
case '1':
head=stu.insert (head);
break;
case '2':
cout<<"姓名, 学号, 总分!!!"<<endl;
stu.output (head);
getch();
break;
case '3':
head=stu.stat(head);
getch();
break;
case '4':
cout<<"请输入想要查找的学生姓名"<<endl;
cin>>name;

stu.find(head,name);
getch();
break;
case '5':
cout<<"请输入想要删除学生姓名"<<endl;

cin>>name;
head=stu.del(head,name);
getch();
break;

default :
cout<<" 对不起,您的输入有误,请重新输入。\n";
getch();
break;
}
}
getch();
return 0;
}
///***********************************************************************

[此贴子已经被作者于2007-3-31 17:38:28编辑过]

18 回复
#2
wuji30442007-03-23 23:42

太好了,LZ 高手

#3
song42007-03-24 08:36
呵呵
很简便的小程序
努力
#4
yuyunliuhen2007-03-24 12:20
不错,加油!
#5
zhtq3012007-03-24 13:48
呵呵
#6
软件探讨2007-03-25 20:33
简直就是一个高手啊!!
以后请多多指教啊
能留个你的QQ号吗?
#7
ttktws2007-03-26 17:59
楼主高手啊 以后有问题要请教的话 希望能给些指点  谢谢
#8
gaoxing2007-03-26 18:11

不错啊,加油

#9
songyongjian2007-03-26 18:14
  我也是刚学,感觉很晕。实在对不住了。
#10
bobee2007-03-26 22:41
LZ  厉害哟  值得学习
#11
anlzy2007-03-28 13:33
我也刚学的,可是怎么老也学不会
#12
坏坏2007-03-28 19:29

新鸟路过....................

#13
wang383616402007-03-28 21:22

老兄,你的程序写的挺不错的啊,可就是运行不了啊,你难道没有试运行一下吗?
我在机子上complier了没有出错,但在转化为*.exe文件时出现两个错,你再看看吧,把调好了再发一个出来吧,我改天再来看, 发我邮箱一起讨论更欢迎啊:wangchao123123@sian.com
#14
天下第二刀2007-03-28 23:01

呵呵, 我就不改了, 本来问题就很多,

要不加我Q:280666302

#15
飞影王子2007-03-30 10:34

我把程序改了一下,能用了,出错是因为申请空间时没有指明空间的大小,这样做错误的,
我也是菜鸟,大家多多指教
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
struct adbook
{
char name[7];
char number[12];
};
//////////////////////////////////////////////////////////
int t=0;
class bookss
{
adbook data[10];

public:
void input(char *p,char* a); //增加函数
void output(); // 输出
void find1(char *p,int n); // 查找
void find2(char *p); //查找
};
////////////////////////////////////////////////

void bookss::input (char *p,char* a)
{
strcpy(data[t].name ,p);
strcpy(data[t].number ,a);
t++;
}

void bookss::output ()
{
cout<<" "<<data[t-1].name <<" "<<data[t-1].number <<endl;
}

void bookss::find1 (char *p,int n)
{
for(int i=0;i<10;i++)
{
for(int j=0;j<strlen(data[i].name);j++)
{
for(int k=j;k<n;k++)
{
if(p[k]==data[i].name[j])
{
cout<<" "<<data[i].name <<" "<<data[i].number <<endl;
break;
}

}

}

}

}
////////////////////////////////////////////////////////////
void bookss::find2 (char *p)
{
for(int i=0;i<10;i++)
{
if(strcmp(data[i].name ,p)==0)
cout<<" "<<data[i].name <<" "<<data[i].number <<endl;
}

}


///////////////////////////////////////////////////////////////////////

int main()
{
char* str=new char[10];
char* number=new char[10];
char i;
int k;
bookss bk;
while(1)
{ system("cls");
cout<<"*---------------------------------------------------*"<<endl;
cout<<"* *"<<endl;
cout<<"* 欢迎使用通迅录 *"<<endl;
cout<<"* *"<<endl;
cout<<"* 请选择操作 *"<<endl;
cout<<"* 1 新增 2 输出 3 查找 4 退出 *"<<endl;
cout<<"*---------------------------------------------------*"<<endl;

cin>>i;
if(i=='4')
{cout<<"谢谢使用,88"<<endl;
exit(0);
}
switch(i)
{
case '1':
{

cout<<"请输入 "<<endl
<<" 姓名, 电话号码"<<endl;

cin>>str>>number;

bk.input (str,number);
}break;
///////////////////////////////////////
case '2':
{ cout<<" 姓名 电话号码"<<endl;
int temp=t;
t=1;
while(temp>=t)
{ bk.output();
t++;
}
t--;
getch();
}break;
//////////////////////////////////
case '3':
{
cout<<" 1 按姓名查找 2 按号码查找 "<<endl;
char n;
char *p1=new char[10];
cin>>n;
cout<<"请输入关键字"<<endl;

switch(n)
{

case '1':
{ cin>>p1;
k=strlen(p1);
cout<<" 姓名 电话号码"<<endl;
bk.find1(p1,k);
getch();
}break;
case '2':
{
cin>>p1;
cout<<" 姓名 电话号码"<<endl;
bk.find2(p1);
getch();
}break;

default:
{
cout << "输入错误!!!,请重新输入" << endl;
getch();
}break;
}break;
delete [] p1;
}break;

default:
{
cout << "输入错误!!!,请重新输入" << endl;
getch();
}break;
}
}
delete [] str;
delete [] number;
return 0;

}
//////////////////////////////////////////////////////////////////////////////////


#16
飞影王子2007-03-30 10:35
如果有指教我加我562012740,中午我是网上
#17
kwbee2007-03-30 13:24

我的电脑上怎么两个都没问题呢

#18
江湖SHARK2007-03-31 14:02

我们老师要我们用C写一个通讯录的程序,
要求比你的复杂啊
搞了好就也没搞出老啊

#19
飘零的叶子2007-04-03 13:48

不错!

1