㈠ c語言設計 學生學籍系統
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intshoudsave=0;/**/
structstudent
{
charnum[10];/*學號*/
charname[20];
charsex[4];
charyuan;
intban;
charneartime[10];/*最近更新時間*/
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu()
{
printf("********************************************************************************");
printf(" 1登記學生資料 2刪除學生資料 ");
printf(" 3查詢學生資料 4修改學生資料 ");
printf(" 5保存學生資料 0退出系統 ");
printf("******************************************************************************** ");
}
voidprintstart()
{
printf("----------------------------------------------------------------------- ");
}
voidWrong()
{
printf(" =====>提示:輸入錯誤! ");
}
voidNofind()
{
printf(" =====>提示:沒有找到該學生! ");
}
voidprintc()/*本函數用於輸出中文*/
{
printf("學號 姓名性別學院班級 ");
}
voidprinte(Node*p)/*本函數用於輸出英文*/
{
printf("%-12s%s %s %c %d ",p->data.num,p->data.name,p->data.sex,p->data.yuan,p->data.ban);
}
Node*Locate(Linkl,charfindmess[],charnameornum[])/*該函數用於定位連表中符合要求的接點,並返回該指針*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按學號查詢*/
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按姓名查詢*/
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
voidAdd(Linkl)/*增加學生*/
{
Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next;/*將指針置於最末尾*/
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4修改'! ",num);
printstart();
printc();
printe(s);
printstart();
printf(" ");
return;
}
s=s->next;
}
p=(Node*)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入學院:");
scanf("%c",&p->data.yuan);
getchar();
printf("請你輸入班級:");
scanf("%d",&p->data.ban);
getchar();
/*信息輸入已經完成*/
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;}
}
voidQur(Linkl)/*查詢學生*/
{
intsel;
charfindmess[20];
Node*p;
if(!l->next)
{
printf(" =====>提示:沒有資料可以查詢! ");
return;
}
printf(" =====>1按學號查找 =====>2按姓名查找 ");
scanf("%d",&sel);
if(sel==1)/*學號*/
{
printf("請你輸入要查找的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf(" 查找結果 ");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
elseif(sel==2)/*姓名*/
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf(" 查找結果 ");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
voidDel(Linkl)/*刪除*/
{
intsel;
Node*p,*r;
charfindmess[20];
if(!l->next)
{
printf(" =====>提示:沒有資料可以刪除! ");
return;
}
printf(" =====>1按學號刪除 =====>2按姓名刪除 ");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf(" =====>提示:該學生已經成功刪除! ");
shoudsave=1;
}
else
Nofind();
}
elseif(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf(" =====>提示:該學生已經成功刪除! ");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
voidModify(Linkl)
{
Node*p;
charfindmess[20];
if(!l->next)
{
printf(" =====>提示:沒有資料可以修改! ");
return;
}
printf("請你輸入要修改的學生學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學號(原來是%s):",p->data.num);
scanf("%s",p->data.num);
printf("請你輸入新姓名(原來是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別(原來是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("請你輸入新的學院:",p->data.yuan);
scanf("%c",&p->data.yuan);
getchar();
printf("請你輸入新的班級(原來是%d):",p->data.ban);
scanf("%d",&p->data.ban);
getchar();
printf(" =====>提示:資料修改成功! ");
shoudsave=1;
}
else
Nofind();
}
voidSave(Linkl)
{
FILE*fp;
Node*p;
intflag=1,count=0;
fp=fopen("c:\student","wb");
if(fp==NULL)
{
printf(" =====>提示:重新打開文件時發生錯誤! ");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf(" =====>提示:文件保存成功.(有%d條記錄已經保存.) ",count);
shoudsave=0;
}
fclose(fp);
}
voidmain()
{
Linkl;/*連表*/
FILE*fp;/*文件指針*/
intsel;
charch;
charjian;
intcount=0;
Node*p,*r;
printf(" 學生成績管理系統 -------建築電氣及智能化0801 ");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:\student","rb");
if(fp==NULL)
{
printf(" =====>提示:文件還不存在,是否創建?(y/n) ");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\student","wb");
else
exit(0);
}
printf(" =====>提示:文件已經打開,正在導入記錄...... ");
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp))/*將文件的內容放入接點中*/
{
p->next=NULL;
r->next=p;
r=p;/*將該接點掛入連中*/
count++;
}
}
fclose(fp);/*關閉文件*/
printf(" =====>提示:記錄導入完畢,共導入%d條記錄. ",count);
while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{getchar();
printf(" =====>提示:資料已經改動,是否將改動保存到文件中(y/n)? ");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf(" =====>提示:你已經退出系統,再見! ");
break;
}
switch(sel)
{
case1:Add(l);break;/*增加學生*/
case2:Del(l);break;/*刪除學生*/
case3:Qur(l);break;/*查詢學生*/
case4:Modify(l);break;/*修改學生*/
case5:Save(l);break;/*保存學生*/
case9:printf(" ==========幫助信息========== ");break;
default:Wrong();getchar();break;
}
}
}
㈡ C語言設計一個學生學籍管理系統,要求文件形式保存,且用到鏈表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//鏈表結點結構體聲明
typedefstructsubjects
{
charname[20];
floatscore;
}sub;
typedefstructstudent
{
intnum;
charname[20];
subsubject[3];
structstudent*next;
}stu,*pstu;
#defineSIZEsizeof(stu)
//函數申明
pstuLoadInfo();
voidPrintMenu();
pstuAddStu(pstu);
pstuDeleStu(pstu);
pstuRwrStu(pstu);
voidFindStu(pstu,char);
voidCount(pstu,char*,float,float);
voidRank(pstu,char*);
voidSaveQuit(pstu);
//主函數
intmain()
{
floatscore1,score2;
charn,j;
charsubname[20];
pstuhead,ptr;
head=LoadInfo();
ptr=head->next;
//創建菜單,進入選擇循環
while(1)
{
PrintMenu();
printf("請輸入您的選擇編號:");
scanf("%d",&n);
getchar();
switch(n)
{
case1:
{
system("cls");
j=0;
while(4!=j)
{
printf("歡迎進入信息管理版塊! ");
printf("