#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef struct Node{
int id;
char name[MAX];
char xy[MAX];
int year;
int month;
int day;
struct Node *next;
}node;
void menu()//菜單頁面
{
printf("\n\n");
printf("\t==============================\n");
printf("\t 歡迎使用學生信息管理系統 \n");
printf("\t==============================\n");
printf("\t 1. 錄入學生信息 \n");
printf("\t 2. 查詢學生信息 \n");
printf("\t 3. 修改學生信息 \n");
printf("\t 4. 刪除學生信息 \n");
printf("\t 5. 升序顯示所有學生信息 \n");
printf("\t 6. 降序輸出所以學生信息 \n");
printf("\t 7. 保存信息 \n");
printf("\t 8. 讀取信息 \n");
printf("\t 9. 退出 \n");
printf("\t==============================\n");
printf("\t請選擇功能1-9:");
printf("\n\n");
}
void enter_inf(node *p)//錄入學生信息
{
printf("\t==============================\n");
printf("請輸入\n");
printf("學生學號(id)");
scanf("%d",&p->id);
getchar();
printf("學生姓名:");
fgets(p->name,MAX,stdin);
printf("學生性別:");
fgets(p->xy,MAX,stdin);
printf("出生日期(年):");
scanf("%d",&p->year);
printf("出生日期(月):");
scanf("%d",&p->month);
printf("出生日期(日):");
scanf("%d",&p->day);
printf("\t==============================\n");
printf("\n\n");
}
void node_creat_one(node *Head)//單個學生信息創建,并升序排列
{
node *p, *pTemp, *pre;
int tag=1;
pTemp=(node *)malloc(sizeof(node));
enter_inf(pTemp);
pre=Head;
p=Head->next;
while(p!=NULL){
if(pTemp->id < p->id){
pre->next=pTemp;
pTemp->next=p;
tag=0;
}
else if(pTemp->id == p->id){
tag=0;
printf("此 id 已存在!\n");
break;
}
pre=p;
p=p->next;
if(!tag) break;
}
if(tag){
pre->next=pTemp;
pTemp->next=p;
}
}
int node_printf_one(node *p)//打印單個學生信息
{
if(!p)
return 1;
printf("\t==============================\n");
printf("\t學生學號(id):%08d\n",p->id);
printf("\t學生姓名:%s",p->name);
printf("\t學生性別:%s",p->xy);
printf("\t出生日期:%d/%02d/%02d\n",p->year,p->month,p->day);
printf("\t==============================\n");
printf("\n\n");
return 0;
}
void node_printf_all(node *Head)//打印所以學生信息
{
node *p=Head->next;
while(p!=NULL){
node_printf_one(p);
p=p->next;
}
}
node *node_find(node *Head,int id)//查詢此id學生節點
{
node *p=Head->next;
while( p->id != id){
p=p->next;
if(!p)
break;
}
return p;
}
void node_correct(node *Head)//修改此id學生節點
{
node *p;
int id;
printf("請輸入學生id:");
scanf("%d",&id);
printf("\n\n");
p=node_find(Head,id);
if(p==NULL)
printf("發生錯誤!\n無此id!\n");
else{
enter_inf(p);
printf("修改成功!\n");
}
}
void node_delect(node *Head)//刪除此id學生節點
{
node *p=Head->next, *pre=Head;
int id;
printf("請輸入學生id:");
scanf("%d",&id);
while(p && p->id != id){
pre=p;
p=p->next;
}
if(p != NULL){
pre->next = p->next;
printf("刪除成功!\n");
}
else
printf("發生錯誤,無此id!\n按任意鍵退出!\n");
}
void node_creat_more(node *Head)//多個學生信息錄入
{
char chioce;
do{
node_creat_one(Head);
getchar();
printf("Continue?(Y/N)");
chioce=getchar();
}while(chioce=='y' || chioce=='Y');
}
void node_save(node *Head)//文件保存
{
node *p;
FILE *fp;
char filename[40];
printf("請輸入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"wt"))==NULL){
printf("寫文件出錯,按任意鍵退出!");
getchar();
exit(1);
}
for(p=Head->next;p!=NULL;p=p->next)
fprintf(fp,"%d %s %s %d %d %d\n",p->id,p->name,p->xy,p->year,p->month,p->day);
printf("\n文件保存成功!按任意鍵退出!\n");
getchar();
fclose(fp);
}
node *node_read(node *Head)//文件讀取
{
node *p, *pre, *r;
FILE *fp;
char filename[40];
printf("請輸入要打開的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"rt"))==NULL){
printf("\n讀文件出錯!\n");
return NULL;
}
p=Head->next;
pre=p;
do{
fscanf(fp,"%d %s %s %d %d %d\n",&p->id,p->name,p->xy,&p->year,&p->month,&p->day);
p=(node *)malloc(sizeof(node));
pre->next=p;
r=pre;
pre=p;
}while(!feof(fp));
r->next=NULL;
fclose(fp);
printf("\n文件讀取成功!\n");
return Head;
}
node *node_printf_all_1(node *head)//逆序輸出
{
if(head==NULL)
return NULL;
node_printf_all_1(head->next);
node_printf_one(head);
return NULL;
}
int main()
{
node *Head, *head;
Head=(node *)malloc(sizeof(node));
head=(node *)malloc(sizeof(node));
Head->next=head;
int key,tag=1,id_1;
char pig;
while(1){
menu();
scanf("%d",&key);
switch(key){
case 1:
if(tag){
enter_inf(head);
getchar();
printf("Continue?(Y/N)");
pig=getchar();
if(pig=='y' || pig=='Y')
node_creat_more(Head);
tag=0;
}
else
node_creat_more(Head);
break;
case 2:
if(tag){
printf("\t當前沒有學生信息\n");
break;
}
do{
printf("請輸入學生id:");
scanf("%d",&id_1);
if(node_printf_one(node_find(Head,id_1)))
printf("無此id!\n");
printf("Continue(y/n)?\n");
getchar();
pig=getchar();
}while(pig=='y' || pig=='Y');
break;
case 3:
if(tag){
printf("\t當前沒有學生信息\n");
break;
}
do{
node_correct(Head);
getchar();
printf("Continue(y/n)?\n");
pig=getchar();
}while(pig=='y' || pig=='Y');
break;
case 4:
if(tag){
printf("\t當前沒有學生信息\n");
break;
}
do{
node_delect(Head);
getchar();
printf("Continue(y/n)?\n");
pig=getchar();
}while(pig=='y' || pig=='Y');
break;
case 5:
if(tag)
printf("\t當前沒有學生信息\n");
else
node_printf_all(Head);
break;
case 6:
if(tag)
printf("\t當前沒有學生信息\n");
else
node_printf_all_1(head);
break;
case 7:
if(tag){
printf("\t當前沒有學生信息\n");
break;
}
node_save(Head);
break;
case 8:
if(!node_read(Head))
tag=1;
else
tag=0;
break;
case 9:
exit(0);
break;
default:
printf("輸入錯誤!請重新輸入!\n");
break;
}
if(Head->next == NULL)
tag=1;
printf("按任意鍵繼續!\n");
getchar();
getchar();
}
return 0;
}
學生信息管理系統3.0
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 【蝴蝶效應】 蝴蝶效應:上個世紀70年代,美國一個名叫洛倫茲的氣象學家在解釋空氣系統理論時說,亞馬遜雨林一只蝴蝶...