當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 編程語言 » 學生基本信息管理c語言

學生基本信息管理c語言-九游会j9娱乐平台

發布時間: 2024-06-26 22:29:44

1. 學生基本信息管理(數據結構用c語言描述)

/*頭文件*/
#include
#include
#include /*其它說明*/
#include /*字元串函數*/
#include /*內存操作函數*/
#include /*字元操作函數*/
#include /*動態地址分配函數*/
#define len sizeof(student)
typedef struct stu /*定義結構體數組用於緩存數據*/
{char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}student;

/*函數原型*/
student *init(); /*初始化函數*/
int menu_select(); /*菜單函數*/
student *create(); /*創建鏈表*/
void print(student *head); /* 顯示全部記錄*/
void search(student *head); /*查找記錄*/
student *delete(student *head); /*刪除記錄*/
student *sort(student *head); /*排序*/
student *insert(student *head,student *new); /*插入記錄*/
void save(student *head); /*保存文件*/
student *load(); /*讀文件*/

/*主函數界面*/
main()
{student *head,new;
head=init(); /*鏈表初始化,使head的值為null*/
for(;;) /*循環無限次*/
{switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=delete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,&new);break; /*&new表示返回地址*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0); /*如菜單返回值為9則程序結束*/
}
}
}

/*初始化函數*/
student *init()
{
return null; /*返回空指針*/
}

/*菜單選擇函數*/
menu_select()
{int n;
struct date d; /*定義時間結構體*/
getdate(&d); /*讀取系統日期並把它放到結構體d中*/
printf("press any key to enter the menu......"); /*按任一鍵進入主菜單*/
getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/
clrscr(); /*清屏*/
printf("********************************************************************************\n");
printf("\t\t welcome to\n");
printf("\n\t\t the student score manage system\n");
printf("*************************************menu***************************************\n");
printf("\t\t\t1. enter the record\n"); /*輸入學生成績記錄*/
printf("\t\t\t2. print the record\n"); /*顯示*/
printf("\t\t\t3. search record on name\n"); /*尋找*/
printf("\t\t\t4. delete a record\n"); /*刪除*/
printf("\t\t\t5. sort to make new a file\n"); /*排序*/
printf("\t\t\t6. insert record to list\n"); /*插入*/
printf("\t\t\t7. save the file\n"); /*保存*/
printf("\t\t\t8. load the file\n"); /*讀取*/
printf("\t\t\t9. quit\n"); /*退出*/
printf("\n\t\t made by hu haihong.\n");
printf("********************************************************************************\n");
printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*顯示當前系統日期*/
do{
printf("\n\t\t\tenter your choice(1~9):");
scanf("%d",&n);
}while(n<1||n>9); /*如果選擇項不在1~9之間則重輸*/
return(n); /*返回選擇項,主函數根據該數調用相應的函數*/
}

/*輸入函數*/
student *create()
{int i,s;
student *head=null,*p; /* 定義函數.此函數帶回一個指向鏈表頭的指針*/
clrscr();
for(;;)
{p=(student *)malloc(len); /*開辟一個新的單元*/
if(!p) /*如果指針p為空*/
{printf("\nout of memory."); /*輸出內存溢出*/
return (head); /*返回頭指針,下同*/
}
printf("enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果學號首字元為0則結束輸入*/
printf("enter the name:");
scanf("%s",p->name);
printf("please enter the %d scores\n",3); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<3;i ) /*3門課程循環3次*/
{
do{
printf("score%d:",i 1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*確保成績在0~100之間*/
printf("data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s p->score[i]; /*累加各門成績*/
}
p->sum=s; /*將總分保存*/
p->average=(float)s/3; /*先用強制類型轉換將s轉換成float型,再求平均值*/
p->order=0; /*未排序前此值為0*/
p->next=head; /*將頭結點做為新輸入結點的後繼結點*/
head=p; /*新輸入結點為新的頭結點*/
}
return(head);
}

/* 顯示全部記錄函數*/
void print(student *head)
{int i=0; /* 統計記錄條數*/
student *p; /*移動指針*/
clrscr();
p=head; /*初值為頭指針*/
printf("\n************************************student************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| rec | num | name | sc1 | sc2 | sc3 | sum | ave | order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=null)
{
i ;
printf("| = | %4s | %-4s | = | = | = | = | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************end**************************************\n");
}

/*查找記錄函數*/
void search(student *head)
{student *p; /* 移動指針*/
char s[5]; /*存放姓名用的字元數組*/
clrscr();
printf("please enter name for searching.\n");
scanf("%s",s);
p=head; /*將頭指針賦給p*/
while(strcmp(p->name,s) && p != null) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p!=null) /*如果指針不為空*/
{printf("\n*************************************found************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| num | name | sc1 | sc2 | sc3 | sum | ave | order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | = | = | = | = | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************end**************************************\n");
}
else
printf("\nthere is no num %s student on the list.\n",s); /*顯示沒有該學生*/
}

/*刪除記錄函數*/
student *delete(student *head)
{int n;
student *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/
char c,s[6]; /*s[6]用來存放學號,c用來輸入字母*/
clrscr();
printf("please enter the deleted num: ");
scanf("%s",s);
p1=p2=head; /*給p1和p2賦初值頭指針*/
while(strcmp(p1->num,s) && p1 != null) /*當記錄的學號不是要找的,或指針不為空時*/
{p2=p1; /*將p1指針值賦給p2作為p1的前驅指針*/
p1=p1->next; /*將p1指針指向下一條記錄*/
}
if(strcmp(p1->num,s)==0) /*學號找到了*/
{printf("**************************************found************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| num | name | sc1 | sc2 | sc3 | sum | ave | order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | = | = | = | = | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************end**************************************\n");
printf("are you sure to delete the student y/n ?"); /*提示是否要刪除,輸入y刪除,n則退出*/
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='n') break; /*如果不刪除,則跳出本循環*/
if(c=='y'||c=='y')
{
if(p1==head) /*若p1==head,說明被刪結點是首結點*/
head=p1->next; /*把第二個結點地址賦予head*/
else
p2->next=p1->next; /*否則將一下結點地址賦給前一結點地址*/
n=n-1;
printf("\nnum %s student have been deleted.\n",s);
printf("don't forget to save.\n");break; /*刪除後就跳出循環*/
}
}
}
else
printf("\nthere is no num %s student on the list.\n",s); /*找不到該結點*/
return(head);
}

/*排序函數*/
student *sort(student *head)
{int i=0; /*保存名次*/
student *p1,*p2,*t,*temp; /*定義臨時指針*/
temp=head->next; /*將原表的頭指針所指的下一個結點作頭指針*/
head->next=null; /*第一個結點為新表的頭結點*/
while(temp!=null) /*當原表不為空時,進行排序*/
{
t=temp; /*取原表的頭結點*/
temp=temp->next; /*原表頭結點指針後移*/
p1=head; /*設定移動指針p1,從頭指針開始*/
p2=head; /*設定移動指針p2做為p1的前驅,初值為頭指針*/
while(t->averageaverage&&p1!=null) /*作成績平均分比較*/
{
p2=p1; /*待排序點值小,則新表指針後移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,說明待排序點值大,應排在首位*/
{
t->next=p1; /*待排序點的後繼為p*/
head=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置p2和p1之間,如p為空則是尾部*/
{
t->next=p1; /*t的後繼是p1*/
p2->next=t; /*p2的後繼是t*/
}
}
p1=head; /*已排好序的頭指針賦給p1,准備填寫名次*/
while(p1!=null) /*當p1不為空時,進行下列操作*/
{
i ; /*結點序號*/
p1->order=i; /*將結點序號賦值給名次*/
p1=p1->next; /*指針後移*/
}
printf("sorting is sucessful.\n"); /*排序成功*/
return (head);
}

/*插入記錄函數*/
student *insert(student *head,student *new)
{student *p0,*p1,*p2;
int n,sum1,i;
p1=head; /*使p1指向第一個結點*/
p0=new; /*p0指向要插入的結點*/
printf("\nplease enter a new record.\n"); /*提示輸入記錄信息*/
printf("enter the num:");
scanf("%s",new->num);
printf("enter the name:");
scanf("%s",new->name);
printf("please enter the %d scores.\n",3);
sum1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<3;i )
{
do{
printf("score%d:",i 1);
scanf("%d",&new->score[i]);
if(new->score[i]>100||new->score[i]<0)
printf("data error,please enter again.\n");
}while(new->score[i]>100||new->score[i]<0);
sum1=sum1 new->score[i]; /*累加各門成績*/
}
new->sum=sum1; /*將總分存入新記錄中*/
new->average=(float)sum1/3;
new->order=0;
if(head==null) /*原來的鏈表是空表*/
{head=p0;p0->next=null;} /*使p0指向的結點作為頭結點*/
else
{while((p0->averageaverage)&&(p1->next!=null))
{p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*p1後移一個結點*/
}
if(p0->average>=p1->average)
{if(head==p1)head=p0; /*插到原來第一個結點之前*/
else p2->next=p0; /*插到p2指向的結點之後*/
p0->next=p1;}
else
{p1->next=p0;p0->next=null;} /*插到最後的結點之後*/
}
n=n 1; /*結點數加1*/
head=sort(head); /*調用排序的函數,將學生成績重新排序*/
printf("\nstudent %s have been inserted.\n",new->name);
printf("don't forget to save the new file.\n");
return(head);
}

/*保存數據到文件函數*/
void save(student *head)
{file *fp; /*定義指向文件的指針*/
student *p; /* 定義移動指針*/
char outfile[10];
printf("enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==null) /*為輸出打開一個二進制文件,為只寫方式*/
{
printf("cannot open the file\n");
return; /*若打不開則返回菜單*/
}
printf("\nsaving the file......\n");
p=head; /*移動指針從頭指針開始*/
while(p!=null) /*如p不為空*/
{
fwrite(p,len,1,fp); /*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("save the file successfully!\n");
}

/* 從文件讀數據函數*/
student *load()
{student *p1,*p2,*head=null; /*定義記錄指針變數*/
file *fp; /* 定義指向文件的指針*/
char infile[10];
printf("enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"rb"))==null) /*打開一個二進制文件,為只讀方式*/
{
printf("can not open the file.\n");
return(head);
}
printf("\nloading the file!\n");
p1=(student *)malloc(len); /*開辟一個新單元*/
if(!p1)
{
printf("out of memory!\n");
return(head);
}
head=p1; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(fread(p1,len,1,fp)!=1) break; /*如果沒讀到數據,跳出循環*/
p1->next=(student *)malloc(len); /*為下一個結點開辟空間*/
if(!p1->next)
{
printf("out of memory!\n");
return (head);
}
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
p2->next=null; /*最後一個結點的後繼指針為空*/
fclose(fp);
printf("you have success to read data from the file!\n");
return (head);
}

2. c語言設計,編程實現學生基本信息管理程序

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<<"姓名:"< <<"數學:"< }
};

//﹌﹌﹌﹌﹌﹌﹌﹌﹌studentmassage類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class studentmassage
{
public:
studentmassage();
~studentmassage();
void showmenu();
void find();
void save();
void modifyitem();
void removeitem();
void swap(student *,student *);
void sort();
//void unpass();
int listcount();
//void average();
void display()
{
for(student * p=head->next;p!=end;p=p->next)
p->show();
cout<<"輸入任意字元!繼續……";
getch();
}
void additem()
{
end->input();
end->next=new student;
end=end->next;
cout<<"添加成功!"< cout<<"輸入任意字元!繼續……";
getch();
}
private:
student * head,* end;
ifstream in;
ofstream out;
student *finditem(char * name)
{
for(student * p=head;p->next!=end;p=p->next)//匹配成功則返回上一個指針,不成功就返回空
if(!strcmp(p->next->name,name))return p;
return null;
}
student *findid(char * id)
{
for(student * p=head;p->next!=end;p=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<<"這是一個新系統,無學生信息。請先輸入。"< else
{
while(!in.eof())
{
end->readfile(in);
if(end->name[0]=='\0')break;
end->next=new student;
end=end->next;
}
in.close();
cout<<"\t\t讀取學生信息成功!"< }
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析構函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
studentmassage::~studentmassage()
{
save();
for(student * temp;head->next!=end;)
{
temp=head->next;
head->next=head->next->next;
delete temp;
}
delete head,end;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜單﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::showmenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓 ☆ 學 生 成 績 管 理 系 統 ☆ 〓〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓★★★★★ ★★★★★★★ ★★★★★〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 2.顯示學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 3.排序統計成績 ☆ ★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 4.查找學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 5.刪除學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 6.修改學生信息 ☆ ★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系統 ☆ ★〓〓〓〓〓〓〓〓〓"<
cout<<"\n\t\t\n\t\t請選擇:";
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::find()
{
char name[20] ,id[10];
int x;
student * p=null;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t※ 1.按學生的姓名查找\n\t\t※ 2.按學生學號查找";
cout<<"\n\t\t*********************************\n請選擇:";
cin>>x;
switch(x)
{
case 1:{cout<<"\t\t請輸入要查找的學生的姓名:";cin>>name;
if(p=finditem(name))
{
p->next->show();
cout<<"輸入任意字元!繼續……";
getch();
}
else
{
cout<<"\t\t沒有找到該姓名的學生!"<<'\n'< cout<<"輸入任意字元!繼續……";
getch();
}
}break;
case 2:
{
cout<<"\t\t請輸入要查找的學生的學號:";cin>>id;
if(p=findid(id))
{
p->next->show();
cout<<"輸入任意字元!繼續……";
getch();
}
else
{
cout<<"\t\t沒有找到該學好的學生!"<<'\n'< cout<<"輸入任意字元!繼續……";
getch();
}
}break;
}

}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::modifyitem() //修改信息
{
char name[20];
student * p=null;
cout<<"\t\t請輸入要修改的人的姓名:";cin>>name;
if(p=finditem(name))
{
cout<<"\t\t已找到學生的信息,請輸入新的信息!"< p->next->input();
cout<<"修改成功!"< cout<<"輸入任意字元!繼續……";
getch();
}
else
{
cout<<"\t\t沒有找到!"< cout<<"輸入任意字元!繼續……";
getch();
}
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌刪除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::removeitem() // 刪除信息
{
char name[20];
student * p=null,*temp=null;
cout<<"\t\t請輸入要刪除的學生的姓名:"<>name;
if(p=finditem(name))
{
temp=p->next;
p->next=p->next->next;
delete temp;
cout<<"\t\t刪除成功!"< cout<<"輸入任意字元!繼續……";
getch();
}
else
{
cout<<"\t\t沒有找到!"< cout<<"輸入任意字元!繼續……";
getch();
}
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::swap(student *p1, student *p2)//交換兩個combox變數的數據域
{
student *temp=new student;
strcpy(temp->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->next;p!=end;p=p->next)
{
n ;
}
return n;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::sort()//對當前鏈表進行排序
{
cout <<"sorting..."< student *p=null,*p1=null,*k=null;
int n=studentmassage::listcount();
if(n<2)
return;
for(p=head->next;p!=end;p=p->next)
for(k=p->next;k!=end;k=k->next)
{
if(p->sum>k->sum)
{
studentmassage::swap(p,k);
}
}
cout <<"排序完成!"< getch();
return;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void studentmassage::save()
{
out.open("sort.txt");
for(student *p=head->next;p!=end;p=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§§§§§§§§§§§§§§§§§§§§§§§§§§"< for(i=0;i<3;i )
cout<<"\t\t◎\t\t\t\t\t\t ◎"< cout<<"\t\t◎★★★★★★★★◎"< for(i=0;i<3;i )
cout<<"\t\t◎\t\t\t\t\t\t ◎"< cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"< studentmassage grade;
cout<<"按任意鍵開始……";
getch();
while(!quit)
{
system("cls");
grade.showmenu();
cin>>x;
switch(x)
{
case 0:quit=true;break;
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;
}
//你要的功能全部實現了~你再改改吧,有多餘的功能,設計報告你就自己寫寫吧!能幫你的就這么多了。
另外,站長團上有產品團購,便宜有保證

請採納。

3. c語言學生管理系統

#include
#include
#include
#include

#define max 20

typedef struct student //學生
{
char sno[max]; // 學號
char sname[max]; //姓名
char sex[max]; //性別
char age[max]; //年齡
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年級

struct student* next;
} student;

student* head;

int logon() //登錄模塊,已實現輸入密碼不回顯,如果中途發現輸錯某幾位,可退格鍵重輸
{
char username[max],password[max];
printf("\n請輸入用戶名:");
scanf("%s",username);
printf("\n請輸入密碼(最多15位):");

//開始以不回顯且支持退格方式獲取輸入密碼
int i=0;
while((i>=0)&&(password[i ]=getch())!=13)//條件i>=0是用於限制退格的范圍
{
if(password[i-1]=='\b')//對退格鍵的處理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';

//已獲取密碼。驗證用戶身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登錄成功!");
return 1;
}
else
return 0;

}

void regist()
{
char ch;
student *s,*ptr; //s用來建新結點,ptr用來暫存頭結點

do
{

s=(student*)malloc(sizeof(student)); // 新建一個學生結點

printf("\n開始注冊..."); //開始注冊
printf("\n請輸入該學生的學號:");
scanf("%s",s->sno);
printf("\n請輸入該學生的姓名:");
scanf("%s",s->sname);
printf("\n請輸入該學生的性別:");
scanf("%s",s->sex);
printf("\n請輸入該學生的年齡:");
scanf("%s",s->age);
printf("\n請輸入該學生的系:");
scanf("%s",s->depart);
printf("\n請輸入該學生所在的班:");
scanf("%s",s->classs);
printf("\n請輸入該學生所在的年級");
scanf("%s",s->grade);

ptr=head;
head=s;//將新結點插入隊頭
s->next=ptr;

fflush(stdin);
printf("\n請問是否繼續注冊?(y/n)");
scanf("%c",&ch);
}while(ch=='y'||ch=='y');

return;
}

void eleprint(char str[]) //輸出單個元素
{
if(str==null) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i ) printf(" ");//為了對齊輸出,需插入一些空格
return;
}

int lineprint(student *ptr) //輸出一行
{
if(ptr==null) //檢查傳進來的指針
return 0;

printf("\n");
eleprint(ptr->sno);
eleprint(ptr->sname);
eleprint(ptr->age);
eleprint(ptr->sex);
eleprint(ptr->depart);
eleprint(ptr->classs);
eleprint(ptr->grade);

return 1;
}

void print() //輸出全部學生信息
{
student *ptr=head;
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(ptr)
{
lineprint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查詢模塊
{
int method;//查詢方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用來接收查詢關鍵字
while(1)
{
printf("\n請選擇查詢方式");
printf("\n1.按學號查詢");
printf("\n2.按姓名查詢");
printf("\n3.按所在系查詢");
printf("\n4.按所在班級查詢");
printf("\n5.按所在年級查詢");
printf("\n6.列印全部學生信息");
printf("\n7.返回主菜單\n");

scanf("%d",&method);

student *p=head,*temp;

switch(method)
{
case 1:
printf("\n請輸入要查詢的學號:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
lineprint(p);
break;
case 2:
printf("\n請輸入要查詢的姓名:");
scanf("%s",name);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->sname,name))
lineprint(p);
p=p->next;
}
break;
case 3:
printf("\n請輸入學生所在的系:");
scanf("%s",departm);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->depart,departm))
lineprint(p);
p=p->next;
}
break;
case 4:
printf("\n請輸入學生所在的班:");
scanf("%s",clss);
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
lineprint(p);
p=p->next;
}
break;

case 5:
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->grade,grades))
lineprint(p);
p=p->next;
}
break;

case 6:
print();
break;

case 7:
return;
default:
printf("很抱歉,暫無此查詢方式!");
break;
}
}

}

void modify()//修改學生信息
{
char num[max];
student *p=head;
printf("\n請輸入要修改的學生的學號:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==null)
{
printf("\n錯誤:沒有此學生的信息!\n");
return;

}
lineprint(p);

printf("\n請輸入要修改的該學生的信息:");
printf("\n1.姓名");
printf("\n2.性別");
printf("\n3.年齡");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年級");

char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n請輸入新的信息:");

switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nerror!");
break;
}

lineprint(p);
return;
}

void del()// 刪除某學生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n請輸入要刪除的學生的學號:");
scanf("%s",num1);
while(p)//查找該學生所在的結點
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}

}//while
if(!p)
{
printf("\n不存在此學生的信息.");
return;
}
lineprint(p);//輸出該學生的信息
printf("\n請問真的要刪除該學生的信息嗎?(y/n)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("\n已經刪除該學生的信息.");
}
return;
}

void sort() //排序模塊。將學生記錄按學號從小到大排列。用起泡排序演算法實現
{

student *ptr,*s=head,*p;
int count=0,count1;
while(s)//統計鏈表結點個數
{
count ;
s=s->next;
}

for(int i=1;i{
ptr=head;
p=null;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==null) //ptr處於隊頭時
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==null) //ptr處於隊頭時
p=head;
else
p=p->next;
}
}
}
return;
}

void quit()
{
char ch;
printf("\n真的要退出?(y/n)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='y'||ch=='y')
exit(0);
return;
}

int main()
{
int option;

printf("\n九游会j9娱乐平台 copyright@2005 kongxincai all rights reserved.");
printf("\n歡迎使用學生信息管理系統!\n");

//登錄模塊
int icheck=0;
while(icheck<3)
{
if(logon()==0)
icheck ;
else
break;

}
if(icheck==3)
{
printf("\n連續登錄三次不成功,退出!");
exit(0);
}

//系統界面

while(1)
{
printf("\n\n請選擇需要的服務:");
printf("\n1.注冊");
printf("\n2.查詢");
printf("\n3.修改");
printf("\n4.刪除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");

scanf("%d",&option);

switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}

}

return 0;

}

熱點內容
phpjava交互 發布:2024-07-17 16:58:57 瀏覽:356
resin下jsp不能正常編譯 發布:2024-07-17 16:34:44 瀏覽:229
sqlserver如何切換主備伺服器 發布:2024-07-17 16:23:02 瀏覽:299
mc18伺服器ip 發布:2024-07-17 16:23:02 瀏覽:379
仙境傳說手游腳本 發布:2024-07-17 16:09:24 瀏覽:691
matlab命令窗口和新建腳本 發布:2024-07-17 15:51:26 瀏覽:375
建ftp文件夾 發布:2024-07-17 15:51:26 瀏覽:955
魔獸撿物腳本 發布:2024-07-17 15:27:56 瀏覽:130
開發ip伺服器 發布:2024-07-17 15:24:42 瀏覽:388
安卓系統視頻製作哪個好用 發布:2024-07-17 15:10:47 瀏覽:210
网站地图