如何用C语言设计出一个学生信息查询系统的程序?

如何用C语言设计出一个学生信息查询系统的程序?,第1张

<<"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

}

//你要的功能全部实现了~你再改改吧,有多余的功能,设计报告你就自己写写吧!能帮你的就这么多了。

另外,站长团上有产品团购,便宜有保证

请采纳。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12294717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存