用C语言编写学生信息管理程序(给出五个主要函数就OK啦!)

用C语言编写学生信息管理程序(给出五个主要函数就OK啦!),第1张

/*接上一楼*/

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

}

/*接下一楼*/

#include <iostream>#include <stdio.h>#include <string.h>#include <conio.h>#include <iostream>#include <ctime>using namespace std#define max 100

//////////////////////////////////////////////////////////////////////////strcut stustruct stu //学生资料结构体{ char name[10] char num[20] //学号 char adress[8] float x,y,z,score int number}

//////////////////////////////////////////////////////////////////////////////student.cppint count=0int temp=0int Exchang=0 //定义数据修改标志,若修改则为1,否则为0class student //学生类{private: stu data[max] char start_delpublic: void input(char *ch1,char *num,char *ch2,float x,float y,float z)//输入 void find(char *num) //查找 void del(char *num) //删除 int check_num(char *num) //确定没有重复学号 { int m=0 while(m<=count) if(!strcmp(num,data[m++].num)) //判断是否相同 break if(m>count) return 0 else return 1 } void taxis() //总分排序 void show() void save()//保存学生资料 void read()//从文件"student"读取学生资料}

void student::input(char *ch1,char *num,char *ch2,float x,float y,float z){ strcpy(data[count].name,ch1) strcpy(data[count].num,num) strcpy(data[count].adress,ch2) data[count].x=x data[count].y=y data[count].z=z count++ Exchang=1//设置已修改数据标志}void student::find(char * num){ int m=0 while(m<=count) if(!strcmp(num,data[m++].num)) break if(m>count) { cout <<"很抱歉,没有该学号的学生" <<endl start_del='n' getch() } else { temp=count count=mstart_del='y' cout <<"该学生的资料为" <<endl <<"序号\t姓名\t学号\t\t地址\t\t\t高数\t英语\t计算机" <<endl show() count=temp getch() }}void student::del(char *num){ char chose find(num) if(start_del=='y') {

cout <<"确实要删除该学生资料? Y/N" <<endl cin >>chose if(chose=='y') { int m=0 while(m<count) if(strcmp(num,data[m++].num)==0)//错在这里 break temp=count count=m if(temp==count) { count=temp-1printf("2") cout <<"该学生资料已删除" <<endl Exchang=1//设置已修改数据标志 } else { while(count<temp) { strcpy(data[count-1].name,data[count].name) strcpy(data[count-1].num,data[count].num) strcpy(data[count-1].adress,data[count].adress) data[count-1].x=data[count].x data[count-1].y=data[count].y data[count-1].z=data[count].z count++

}printf("1") count=temp-1 cout <<"该学生资料已删除" <<endl Exchang=1//设置已修改数据标志 } } else cout <<"学生资料未删除" <<endl getch()

}}void student::taxis(){ int x,y,array[max] int change for(x=0x<countx++) array[x]=data[x].score=data[x].x+data[x].y+data[x].z for(x=0x<count-1x++) for(y=0y<count-1-xy++) if(array[y]<array[y+1]) { change=array[y] array[y]=array[y+1] array[y+1]=change } cout <<"总分\t姓名\t学号\t\t地址\t\t高数\t英语\t计算机" <<endl for(x=0x<countx++) for(y=0y<county++) if(array[x]==data[y].score) { cout <<data[y].score <<"\t" <<data[y].name <<"\t" <<data[y].num <<"\t" <<data[y].adress <<"\t" <<data[y].x <<"\t" <<data[y].y <<"\t" <<data[y].z <<endl } getch() Exchang=1//设置已修改数据标志}

void student::show(){ cout <<count <<"\t" <<data[count-1].name <<"\t" <<data[count-1].num <<"\t" <<data[count-1].adress <<"\t\t" <<data[count-1].x <<"\t" <<data[count-1].y <<"\t" <<data[count-1].z <<endl}

//////////////////////////////////////////////////////////////////////main.cppvoid main(){ student st char *ch1,*ch2,chose char flag[2],num[20],find[20],del[20] char ch

float x,y,z time_t t time(&t)

while(1) { system("cls") cout <<"------------------------学生管理系统------------------------" <<endl

<<" 1.输入/添加学生资料 "<<endl <<" 2.输出学生资料" <<endl <<" 3.查找 " <<endl <<" 4.删除" <<endl <<" 5.总分排序" <<endl <<" 6.退出" <<endl <<endl <<"请选择你要的服务(1-6)"<<endl cin >>chose if(chose=='6') { break } switch(chose) { case '1': // 输入学生信息 { do { cout <<"请输入学生姓名:" <<endl ch1=new char[] ch2=new char[] cin >>ch1 cout <<"请输入学号:" <<endl cin >>num while(st.check_num(num)) { cout <<"学号重复,请重新输入" <<endl cin >>num } cout <<"请输入地址:"<<endl cin >>ch2 cout <<"请输入高数成绩:"<<endl cin >>x cout <<"请输入英语成绩:" <<endl cin >>y cout <<"请输入计算机成绩:" <<endl cin >>z st.input(ch1,num,ch2,x,y,z) printf("\n是否继续输入学生信息?(\"y\"继续)") scanf("%s", flag) }while(strcmp(flag, "y") == 0) }break case '2':// 输出学生资料 { temp=count count=1 cout <<"序号\t姓名\t学号\t\t地址\t\t\t高数\t英语\t计算机" <<endl while(count<=temp) { st.show() count++ } count-- getch() }break case '3': { cout <<"请输入你要查找学生的学号" <<endl cin >>find st.find(find) }break case '4': { cout <<"请输入你要删除的学生学号" <<endl cin >>del st.del(del) }break case '5': { st.taxis() }break

default: { cout <<"输入错误!!!,请重新输入" <<endl getch() } } } cout <<"感谢你的使用!\n" <<endl getch()

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存