<<"1.输入/添加学生资料"<<endl<<"
2.输出学生资料"<<endl<<"
3.查找"<<endl<<"
4.删除"<<endl<<"
5.总分排序"<<endl<<"
6.退出"<<endl<<endl<<"
请选择你猛核要的服务(1-6)"<<endlcin>>choseif(chose=='6'){break}switch(chose){case'1'://
输入学生信息{do{cout<<"
请输入学生姓名:"<<endlch1=newchar[]ch2=newchar[]cin>>ch1cout<<"
请输入学号:"<<endlcin>>numwhile(st.check_num(num)){cout<<"
学号重复,请重新输入"<<endlcin>>num}cout<<"
请输入地址:"<<endlcin>>ch2cout<<"
请输入高数成绩:"<<endlcin>>xcout<<"
请输入英语成绩:"<<endlcin>>ycout<<"
请输入计算机成绩:"<<endlcin>>zst.input(ch1,num,ch2,x,y,z)printf("\n
是否继续输入学生信息?(\"y\"继续)")scanf("%s",flag)}while(strcmp(flag,"y")==0)}breakcase'2'://
输出学生资料{temp=countcount=1cout<<"
序号\t姓名\t学号\t\t地址\t\t\t高数\t英语\t计算机"<<endlwhile(count<=temp){st.show()count++}count--getch()}breakcase'3':{cout<<"
请输入你要查找学生的学号"<<endlcin>>findst.find(find)}breakcase'4':{cout<<"
请输入你要删除的学生学号"<<endlcin>>delst.del(del)}breakcase'5':{st.taxis()}break
default:{cout<<"输入错误!!!,请重新输入"<<endlgetch()}}}cout<<"感谢你的使用!\n"<<endlgetch()
}
#include<stdio.h>
#include<windows.h>
#include<string.h>
structworker
{
intnum
charname[20]
charzhicheng[10]
intwages
intreward
longbirth
intsalary
}work[500],work1/*定义结构体*/
voidmenu()//声明菜单函数
voidtype_in()//声明录入函数
voidbaocun(int)//声明保存函数
voidscan()//声明浏览函数
voiddel()//声明删除函数
voidsearch()//声明查询函数
voidsearch_zhicheng()//声明按职称查询函数
voidsearch_name()//声明按姓名查找函数
voidchange()//声明修改函数
voidorder()//声明排序函数
voidadd()//声明添加函数裂敏
voidorder_wages()
voidorder_name()
voidmenu()/*菜单函数*/
{
printf("\n")
printf("welcometo\n")
printf("职工信息管理系统")
printf("******************************************************************************\n")
printf("1.录入职工信息\n")
printf("肆知枝2.浏览职工信息\n")
printf("3.查询职工信息\n")
printf("4.删除职工信息\n")
printf("5.修改职工信息\n")
printf("6.职工信息排序\n")
printf("7.添加职工信息\n")
printf("8.退出\n")
printf("*******************************************************************************\n")
printf("\n")
}
/********************************************************************************************/
voidmain()
{
intn,f
while(1)
{
do
{
menu()/*调用菜单函数*/
printf("请输入你需要 *** 作的序号(1—8):\n")
scanf("%d",&n)
if(n>=1&&n<=8)
{
f=1
break
}
else
{
f=0
printf("您输入有误,请重新选择!")
}
}while(f==0)
switch(n)
{
case1:printf("录入职工信息\n")printf("\n")type_in()break
case2:printf("浏览职工信息\n")printf("\n")system("cls")scan()break
case3:printf("查询职工信息\n")printf("\n")system("cls")search()break
case4:printf("删除职工信息\n")printf("\n")system("cls")del()break
case5:printf("修改职工信息\n")printf("\n")system("cls")change()break
case6:printf("职工信息排序\n")printf("\n")system("cls")order()break
case7:printf("添加职工信息\n")printf("\n")system("sls")add()break
case8:gotoloop/*用goto语句跳至跳至指定的行*/
default:break
}
}
loop://行标
system("cls")
printf("\n\n\n\n\n\n-----
/*接上一楼*/struct
Student
*create()
/*create函数定义,此函数实现创建单向动态链表*/
{
struct
Student
*head=NULL,*p1,*p2
/*head,链表的头指针;*p1,*p2,中间指针变量*/
puts("\n现在请输入学院名:")
scanf("%s",college)
puts("\n年级:")
scanf("%s",grade)
puts("\n专业和班级:")
scanf("%s",classname)
puts("\n下面请按提示依次输入数据:\n(如果要结束输入,请输入学号0)")
p1=p2=(struct
Student
*)malloc(LEN)
puts("输入第一个学生的学号:")
scanf("%ld",&p1->num)
puts("输入此学生成绩:\n英语:")
scanf("%f",&p1->score.english)
puts("数学:")
scanf("%f",&p1->score.math)
puts("计算机:")
scanf("%f",&p1->score.computer)
total_and_aver(p1)/*计算总分和平均分*/
p1->grade=mark_grade(p1)
for(p1->num!=0)
{
len++
if(len==1)
head=p1
else
p2->next=p1
p2=p1
p1=(struct
Student
*)malloc(LEN)
puts("输入下一个学生的学号:")
scanf("%ld",&p1->num)
puts("输入此学生成绩:\n英语:")
scanf("%f",&p1->score.english)
puts("数学:")
scanf("%f",&p1->score.math)
puts("计算机:")
scanf("%f",&p1->score.computer)
total_and_aver(p1)/*计算总分和平均分*/
p1->grade=mark_grade(p1)
}
p2->next=NULL
return
(head)
}
struct
Student
*del(struct
Student
*head,long
del_num)
/*del函数定义,此函数实现从现有链表岩念中删除一个结点*/
{
struct
Student
*p1,*p2
if(head==NULL)
puts("空表,没有任何数据记录。\n")
else
{
for(p1=head!(del_num==p1->num||p1->next==NULL)p2=p1,p1=p1->next)
if(del_num==p1->num)
{
if(p1==head)head=p1->next
else
p2->next=p1->next
printf("学号基世为%ld学生的数据删除成功。\n",del_num)
--len
}
else
printf("未找到学号为%ld学生的记录。\n",del_num)
}
return
(head)
}
struct
Student
*insert(struct
Student
*head,struct
Student
*new_student)
/*insert函数定义,此函数实现向现有链表中插入一个结点或覆盖相同学号的数据*/
{
struct
Student
*p0=new_student,*p1=head,*p2
char
control
if(head==NULL)
{
head=p0
p0->next=NULL
puts("数据插入成功。\n")
}
else
{
for(((*p0).num>(*p1).num)&&(p1->next!=NULL)p2=p1,p1=p1->next)
if((*p0).num==(*p1).num)
{
printf("已经存在一个学号为%ld的学生的数据,要覆盖原有数据吗?\n输入
Y
=覆盖原有数据\n输入其它=保留原有数据\n",p0->num)
FFLUSH
scanf("%c",&control)
FFLUSH
switch
(control)
{
case
'Y':
case
'y':if(p1==head){head=p0p0->next=p1->next}
else
{p2->next=p0p0->next=p1->next}
puts("数据已粗锋困经更新\n")break
default:break
}
len--
}
else
if((*p0).num<(*p1).num)
{
if(p1==head)head=p0
else
p2->next=p0
p0->next=p1
puts("数据插入成功。\n")
}
else
{
p1->next=p0
p0->next=NULL
puts("数据插入成功。\n")
}
}
++len
return
(head)
}
struct
Student
*sort(struct
Student
*head)
/*sort函数定义,此函数实现对链表中的数据按照平均分高低排序*/
{
struct
Student
*p1,*p2
for(p1=headp1->next!=NULLp1=p1->next)
for(p2=p1->nextp2!=NULLp2=p2->next)
{
if(p1->score.average<p2->score.average)
{
SWAP(p1->num,p2->num)
SWAP(p1->grade,p2->grade)
SWAP(p1->score.english,p2->score.english)
SWAP(p1->score.math,p2->score.math)
SWAP(p1->score.computer,p2->score.computer)
SWAP(p1->score.total,p2->score.total)
SWAP(p1->score.average,p2->score.average)
}
}
return
head
}
/*接下一楼*/
t#
include
#
include
#include
//用getch()
using
namespace
std
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class
Student
{
public:
char
name[20]
char
Id[20]
int
Cnum
//C课程得分
int
Mnum
//数学课程得分
int
Enum
//英语课程得分
int
sum
//总分
Student
*
Next
void
Input()
{
cout<<"\t\t请输入学生的姓名:"
cin>>name
cout<<"\t\t请输入学生的学号:"
cin>>Id
cout<<"\t\t请输入C课程的成绩:"
cin>>Cnum
cout<<"\t\t请输入数学课程的成绩:"
cin>>Mnum
cout<<"\t\t请输入英语课程的成绩:"
cin>>Enum
sum=Cnum+Mnum+Enum
}
void
ReadFile(istream
&
in)
{
in>>name>>Id>>Cnum>>Mnum>>Enum>>sum
}
void
Show()
{
cout<<"姓名:"<
Nextp!=Endp=p->Next)
p->Show()
cout<<"输入任意字符!继续……"
getch()
}
void
AddItem()
{
End->Input()
End->Next=new
Student
End=End->Next
cout<<"添加成功!"<
Next!=Endp=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->name,name))return
p
return
NULL
}
Student
*FindID(char
*
Id)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)//匹配成功则返回上一个指针陆厅,不成功就返回空
if(!strcmp(p->Next->Id,Id))return
p
return
NULL
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new
Student
Head->Next=new
Student
End=Head->Next
in.open("sort.txt")
if(!in)
cout<<"这是一个新系统,无学生信息。请先输入。"<
ReadFile(in)
if(End->name[0]=='\0')break
End->Next=new
Student
End=End->Next
}
in.close()
cout<<"\t\t读取学生信息成功!"<
Next!=End)
{
temp=Head->Next
Head->Next=Head->Next->Next
delete
temp
}
delete
Head,End
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓
☆
学
生
成
绩
管
理
系
统
☆
〓〓〓〓〓〓〓〓〓〓"<
>x
switch(x)
{
case
1:{cout<<"\t\t请输入要查找的学生的姓名:"cin>>name
if(p=FindItem(name))
{
p->Next->Show()
cout<<"输入任意字符!继续……衫衡"
getch()
}
else
{
cout<<"\t\t没有找到该姓名的学生!"<<'\n'<
>Id
if(p=FindID(Id))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该学好的学生!"<<'\n'<
>name
if(p=FindItem(name))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!"<
Next->Input()
cout<<"修改成功!"<
>name
if(p=FindItem(name))
{
temp=p->Next
p->Next=p->Next->Next
delete
temp
cout<<"\t\t删除成功!"<
name,p1->或悉做name)
strcpy(temp->Id,p1->Id)
temp->Cnum=p1->Cnum
temp->Mnum=p1->Mnum
temp->Enum=p1->Enum
temp->sum=p1->sum
strcpy(p1->name,p2->name)
strcpy(p1->Id,p2->Id)
p1->Cnum=p2->Cnum
p1->Mnum=p2->Mnum
p1->Enum=p2->Enum
p1->sum=p2->sum
strcpy(p2->name,temp->name)
strcpy(p2->Id,temp->Id)
p2->Cnum=temp->Cnum
p2->Mnum=temp->Mnum
p2->Enum=temp->Enum
p2->sum=temp->sum
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int
Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
if(!
Head)
return
0
int
n=0
for(Student
*
p=Head->Nextp!=Endp=p->Next)
{
n++
}
return
n
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Sort()//对当前链表进行排序
{
cout
<<"Sorting..."<
Nextp!=Endp=p->Next)
for(k=p->Nextk!=Endk=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage::Swap(p,k)
}
}
cout
<<"排序完成!"<
Nextp!=Endp=p->Next)
out<
name<<"\t"<
Id<<"\t"<
Cnum<<"\t"
<
Mnum<<"\t"<
Enum<<"\t"<
sum<<'\n'
out.close()
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int
main()
{
int
x,i=0
bool
quit=false
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<
>x
switch(x)
{
case
0:quit=truebreak
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
}
//你要的功能全部实现了~你再改改吧,有多余的功能,设计报告你就自己写写吧!能帮你的就这么多了。
另外,站长团上有产品团购,便宜有保证
请采纳。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)