资源描述
#i nclude ” s tdio h”#include "stdlib.h,#inc lude ”strinh”
int shoudsave=0; /* 对s truct S ud entc har num[10];/* 学号 * /char name [20];
char sex[4 ;
tele;
int i rthint a e;
char addr[30];
);type def s tru ct nod e
struct sude n t data
struct node
*next;
}Node,*Link ;
**
void me nu()
printf(* ***** ***
***
***************
**
****” );
printf("\t 1登记学生资料\t\t\t\t\i删除学生资料\n");
p rintf”( \t 3查询学生资料\t\ \t\ \t4修改学生资料\n");
p ri ntf("\t保存学生资料\t\t\t\Nt0退出系统\n");
pr i n t f (”**** ********** * ******** ******** ***** **** **** ****
********* ***** * * * * *** * ******* * * \n" r
;
void printstar(t )prin t f(”vo id Wrong()printf (”\n = ====〉提示:输入错误!\n”);void Nofind()p rintf( \n== = ==〉提示:没有找到该学生! \n");
}
void p r i ntc () /*本函数用于输出中文*/
{
print f('学号\t姓名性别\t 电话\t出生年月\t年龄\t地址\n
");
}
vo i d p rinte( No de *p )/*本函数用于输出英文,即输出结构体中各个成员的值,
注意是通过指向结构体的指针访问结构体的成员的数据域*/
{
p r intf("%—1 0 s%s \ t % s\t %d \t % d\t % d\t %s\n”,pdata.num,p->datao n ame,p-〉data. sex, p—〉data. tele,p—〉data。birth, p-〉data.age,p-〉data . a ddr );
}
Node * Lo cate(Link l, char find m ess[],char nameornum []) /* 该函数用于定位连表中符合要求的接点,并返回该指针*/
{
Node *r;
if (stc mp(na meo rnum,” num” )==0) /* 按学号查询 */
{
r=l—〉next;
while(r! = NUL L)
{
if(s rcm p( r—〉data。num,fin dmess) = = 0)
ret urn r;
r=r—〉next;
}
}
elsei(strcmp ( nameo rnum,”n ame” )== 0) /* 按姓名查询 * /
{
r=l—〉next;
wh ile(r!=NULL )
{
i f(st rcm p (r〉data。name , f in dmes s)==0)
return r;
r=r->next;
}
}
return 0;
/}* * *****************************************************
void Add (Link l /* 增加学生 */
{
Node *p,*r,*s;
cha r num [10];
r=l;
s=l〉nex t;
while (—>next !=NUL L)
r=r—〉next; /*将指针置于最末尾,通过循环指向最后一个结点* /
while(l)
{
printf( ”请你输入学号(以,0’返回上一级菜单”);
scanf ("%s”,num);
if (strcmp(n um," 0” = = 0)
break;
wh i le(s)
{
if(strcp (s〉data.num, n um)= = 0 )
{
print f(” ===== >提示:学号为’ % s’的学生已经存在,若要修改请你选择,4 修改'!\n",num);
printsat rt();
printc();
printe(s;)
printstart(;)
pr i ntf('\n”);
return;
}
s=s—〉next;
}
p=(Nod e *)ma l loc (sizeof (No d e));
s trcpy(p-〉data。num,n um );
pr i ntf(请你输入姓名:”);
scan f("%s' , p—>d at a.name );
getchar();
printf ”请你输入性别:”);
scanf (” %s",p—〉data。sex);/*输入数据到性别的dat a域中,注意字符数组
和普通变量* /
g e tch a r();
printf”请你输入年龄:”);
scanf( "%d" , &p —>d ataage);
getchar ();
pr i ntf(请你输入出生年月:”);
scanf(”% d”,&p—〉dataobir th);
getch ar();
p r intf(请你输入电话:”);scan f("% d”,&p ->data. te le);getchar()
printf( ”请输入地址:”);
s c anf ("%s",&p-〉data。addr);g e t char();
/*信息输入已经完成*/
p >n e xt=NULL;
r —>next=p;
r=p;
shou dsave=l ;
}
}
v oid Qur (L ink l) /* 查询学生 */
{
i nt sei;
char findmess[2 0];
N ode *p;
i f ( l—>n ext)
{
printf ( \n=====〉提示:没有资料可以查询!\占);
re turn;
}
p rintf”( \n== ===〉1 按学号查找\n=====〉2 按姓名查找\n” );
s can f ("%d ”,&sel);
if S el==1)/*学号 */
{
prin t f ("请你输入要查找的学号:”);
scanf (” %s",fn dmess);
p = Locate(l,ifndmess,"num");
if(p)
{
printf (”\t\t\t蜀找结果\n” );
printstart();
printc();
printe(p);
printstart();
}
eise
No find();
}
elseif(sel==2) / 姓名 * /
{
print"请你输入要查找的姓名:”);
sca nf ( "%s”,fin山e s s);
p = Locat e(l find mess, "nam e ");
if(p)
{
printf”( \t\ \t\t查找结果\n");
pr i ntstart();
prin tc );
p rinte(p);
p r intst art()
}
else
No f ind ()
}
else
Wrong。;
}
void Del Link l) /* 删除 * /
{
int sei;
No de *p, *r;
char fid mess[20];
if (! —〉ne x t)
{
printf(” \n=====〉提示:没有资料可以删除!\n”);return;
}
printf(" \n== = ==〉1 按学号删除\n=====>2 按姓名删除\if );
scanf("%d”,& el);
if(sel==1)
{
print ft请你输入要删除的学号:”。
scan f("% s”,f indm ess);
p=Locate ( l,f indmes s ,”nunf );
if(p)
{
r=l;
w hile(r-〉next!=p)
r=r->next;/*r指针指向后一个结点*/
r—〉next=p—〉next;/删除p结点*/
free(p);
printf("\n = ====〉提示:该学生已经成功删除!\n");
shou d save=1;
}
e Ise
N ofind();
}
e Ise if ei= =2)
{
pr intf(请你输入要删除的姓名:”);
s can f("%s”,findme s);
p=L oc ate ( l,f id me s s, "name”);
if (p)
{
r=l;
wh i le( r> next! =p )
r=r->n ext;/*r指针指向后一个结点*/
r—>next=p—〉next;/* 删除 p 结点*/
free(p );pr i ntf ("\n=====〉提示:该学生已经成功删除! \n” );
shoud save=1;
}
else
No find();
}
else
Wrong ();
}
void Modify ( Lin k l)
{
Node *p;
char f indme s s[20];
if(!l—〉next)
{
printf(” \n== = = =>提示:没有资料可以修改! \n");
return;
}
print ft请你输入要修改的学生学号:");
scanf (”%s”,find mess);
p=Loc ate (l ,fi ndmess,”num");
if(p)
{
printf(”请你输入新学号:”);
scanf("%s”,p —> data.num );
printf ("请你输入新姓名:”);
scanf ("%s”,p-〉data。name );
g etchar ();
printf请你输入新性别:”);
s canf("% s”,p—〉data. sex);
printf("请你输入新的年龄:");
sc anf (" %d”,&p—〉data. age);
getchar );
printf("请你输入新的出生年月:”);scan f(”%d ",&p->da ta。b ir th);
getchar();
printf( ”请你输入新的电话:”);
scanf("%d”,&p-〉data。tele);
printf”(请输入新的地址:");
scanf( "%s " ,&p —> data. te le);
printf ” \n= = = = =〉提示:资料修改成功!虹");
shou dsave=1;
}
else
Nofind ();
}
void D isp(Lirk l)
{
/*int c ount=0; */
Node *p;
p=l—〉next;
if!( p)
{
printf(”\n=====〉提示:没有资料可以显示!\n");
return
}
print f(" \t \t\\ t 显示结果\n” );
prints tart;)
p ri ntc ();
printf"( \n ” ;)
while(p)
{
printe(p);
p =p-> nex t;
}
print sta rt();
prin tf ( "\n ");
}
void T ongji(Lin k l)
{
Node *pm, *pe, *pc; /*用于指向分数最高的接点*/Nod e *r =l—>next;
if(!r)
{
printf( \n = = = ==〉提示:没有资料可以统计! \n");
r eturn ;
}pm=pe=pc=r;
wh ile(r! =NULL)
{
if (r->dat a.ag e〉=p c —> d ataoage)
pc=r;
if(r-〉data。birth>=p m->d ata。b i rth)pm=r;
i f (r-> dataot el> =pe -〉data。tele
pe=r;
r=r—> n ext;
}
}
void Sort( Lin k l)
{
Link ll;
No de *p,* rr,*s;
l l=(Lin k)ma l loc(s izeo f (Node)) ; /*用于做新的连表 */l—>next=NULL;
if (l—>n ext==NULL)
{
printf(”\n=====〉提示:没有资料可以排序!\n” );
return ;
}
p=l—> next;
while(p)
{
s=(Node*)m alloc (size of(Node)) /* 新建接点用于保存信息 */s—>da ta=p-> data;
s> next=NULL ;
rr=ll;
while (r r-> next!=NULL )rr = r r> next;
if(r—〉next==NUL L)
rr-> next=s;
else
{
s-> next= rr->ne xt;
rr—>next =s ;
}
p=p > next;
}
f ree(l;)
l->next= ll> next;
printf(” \n===== >提示:排序已经完成!\n”);
}
v oid Sav e(L ink l
{
FIL E* fp;
Nod e *p;
int f a g=1, co unt=0;
fp= fopen (”c \Studen t”,Wb” );
if(pf ==NUL L)
{
printf(”\n===== >提示:重新打开文件时发生错误! \if );exit(1);
}
p= l—>next;
while(p)
{
iff write ( p,size(f (N ode),1,fp)==1
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(fal g)
{printf”\n=====〉提示:文件保存成功。(有%《条记录已经保存.)\n ,count)shou dsave= 0;
}fclose(fp);
}
v oid m ain(){
L i nk ; /* 连表 * /
FILE * fp;/*文件指针* /
int sel;char ch;char ji an;int ccun t=0;N ode *p,*r;printf( \t\tt\ \ t学生信息管理系统\n\t\t\t-信息工程学院XX X\ n”);
l= ( Nod e*)malloc(sizeof(N©d));l〉next=NULL;r=l;
fp=fope n("C : \\studen t",” rb”);if (fp= =NUL L)/*判断文件是否存在*/
{printf(" \n=====〉提示:文件还不存在,是否创建?(y/n)\A );scan f(”%c ",&jian);
if(jian==’y'anj==’Y)fp=fopen(”C\\std e n t ","wb ");elseexit(Q)
}
printf(”\n = ====〉提示:文件已经打开,正在导入记录。。.。。.\n");whi le(! f eof(fp))
{p=(Node*)ma lloc(s izeof(Node))if(fr ad(p, sizeof(Node), 1 fp)) /*将文件的内容放入接点中* /{
p—〉nex t=NULL;r—〉ne xt=p;r= p; /* 将该接点挂入连中*/count++;
}}fclose(fp);/* 关闭文件 * /
p r intf( "\n=====〉提示:记录导入完毕,共导入% d条记录。\n” , count);
w hile(1)
{
menu ();
p r intf (请你选择操作:”);
scanf ("%d" &sel)
if (sel==0)
{
if (s hou d save==1)
{ getchar(;
printf(”\n=====〉提示:资料已经改动,是否将改动保存到文件中(y/n)? \n");
scanf('% c”,&ch);
i f(ch==’y’||ch¥=')
Save(l);
}
p rintf( "\n= ====〉提示:你已经退出系统,再见!\n” );
break;
}
swi tch(se)
{
case 1Add ( l);bie ak; /* 增加学生 */
case 2:Del(l break; /* 删除学生 */
case 3:Qur(l) ;break; /* 查询学生 */
case 4: Mo difyl );bre ak;/* 修改学生 */
case 5: Save (l) ; b rea k; /* 保存学生 */
case 9:pr intf>,( \t \t\ t========== 帮助信息====== ====\n” );brea k;
defaul t: W rong(); getc har(); break;
}
}
}
展开阅读全文