1. 程式人生 > >學生資訊管理系統----線性表

學生資訊管理系統----線性表

    資料結構線性表實驗,學生管理系統,c語言的時候不是自己寫的,現在又有機會自己寫一份,定義了全域性的連結串列,老師說函式沒引數,最好用ADT,就到這吧,不想改了,看來以後寫程式要考慮函式的通用性,應該系統的學學C++了,用物件的思想來寫程式了;

SqList:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>

const int MAXN=100+10;

typedef struct{
	char name[10]; 
	char no[10];
	int sco;
}Student;

int len=0;

void Input(Student *stu)
{
	printf("輸入學生個數: ");
    int N,i;
    scanf("%d",&N); 
	if(N>=MAXN)  printf("輸入人數已達最大限度(最多學生人數為109人),請諒解!\n");
	else{
		len=N;
	    for(i=1;i<=N;++i)
	    { 
	        printf("\n請輸入第%d個學生的名字: ",i); 
	    	scanf("%s",stu[i].name);
	    	printf("\n請輸入第%d個學生的學號: ",i); 
			scanf("%s",stu[i].no);
			printf("\n請輸入第%d個學生的分數: ",i); 
			scanf("%d",&stu[i].sco); 
		}
	} 
	printf("\n\n輸入回車鍵返回主選單");
	getch(); return ;
}
void Output(Student *stu)
{
    int i=0; 
    if(len<=0) 
    	printf("\n尚未錄入學生資訊,請錄入!!!"); 
    else
	 {
	 	printf("姓名\t\t學號\t\t成績\n");
	    for(i=1;i<=len;++i)
	    {
	    	printf("%-16s%-16s%d\n",stu[i].name,stu[i].no,stu[i].sco);
		}
	 }
	printf("\n輸入回車鍵返回主選單");
	getch();
	return ;
} 
void Get_Len(Student *stu)
{
	if(len<=0) printf("學生人數為0,請先錄入學生資訊!!!\n");
	else{
		printf("\n學生總數為: %d\n",len);
	}
	printf("\n\n輸入回車鍵返回主選單");
	getch();
	return ;
}
void Search_Name(Student *stu) 
{
	printf("\n請輸入學生姓名:");
	char str[23]; scanf("%s",str); 
	int i=0;
	for(i=1;i<=len;++i)
 	{
		if(!strcmp(str,stu[i].name)) break;
	} 
	if(i<=len)  printf("\n該學生的學號為: %s 成績為: %d\n",stu[i].no,stu[i].sco);
	else printf("找不到該學生資訊\n");
	printf("\n\n輸入回車鍵返回主選單");
    getch(); 
}
void Search_Pos(Student *stu)
{
	printf("請輸入學生序號: ");
	int num;
	scanf("%d",&num);  puts("");
	if(num>len||num<1) 
	{
		printf("輸入錯誤,請核對後重試!!!\n"); return ;
	}
	else {
		printf("學生姓名:%s\n",stu[num].name);
	    printf("學生學號:%s\n",stu[num].no);
	    printf("學生分數:%d\n",stu[num].sco);
	}
    printf("\n\n輸入回車鍵返回主選單");
    getch();
}
void Insert(Student *stu)
{
	printf("請輸入插入位置: ");
	int pos; scanf("%d",&pos);  puts("");
	if(pos<1||pos>len+1) printf("輸入資訊錯誤,請核對後再試!!!\n");
	else{
		int i=0;
		for(i=len;i>=pos;--i) 
		{
			strcpy(stu[i+1].name,stu[i].name);
			strcpy(stu[i+1].no,stu[i].no);
			stu[i+1].sco=stu[i].sco; 
		}
		printf("請輸入要插入的學生的資訊\n");
		printf("姓名: "); scanf("%s",stu[pos].name);
		printf("學號: "); scanf("%s",stu[pos].no);
		printf("分數:"); scanf("%d",&stu[pos].sco);
		printf("\n插入成功!");  len++; 
	}
	printf("\n\n輸入回車鍵返回主選單");
    getch();
}
void Delete(Student *stu)
{
	if(len<=0) printf("\n學生人數為0,請先錄入學生資訊!!!");
	else
	{ 
	    printf("\n請輸入刪除學生的編號: ");
		int num=0; scanf("%d",&num); puts("");
		if(num<1||num>len)
		{
		    printf("\n輸入有誤,請核對後重試!!!\n");  
		} 
		else{
			int i=0;
			for(i=num;i<len;++i)
			{
			    strcpy(stu[i].name,stu[i+1].name);
				strcpy(stu[i].no,stu[i+1].no);
				stu[i].sco=stu[i+1].sco; 
			}	
			len--; printf("\n成功刪除!!!\n"); 
		} 
	 } 
	printf("\n\n輸入回車鍵返回主選單");
	getch();
} 

void meau(Student *stu)
{
    int choose;
    printf("--------------------------歡迎使用學生資訊管理系統----------------------------\n\n\n\n");
   
    printf("1.輸入學生資訊\n");
	printf("2.檢視學生資訊\n");
	printf("3.輸入姓名,查詢學生資訊\n");
	printf("4.輸入學生編號,檢視學生資訊\n");
	printf("5.輸入學生資訊,插入到指定位置\n");
	printf("6.刪除指定位置學生資訊\n");
	printf("7.統計學生個數\n");
	printf("8.退出系統\n"); 
	printf("\n\n請輸入操做所對編號: ");
	scanf("%d",&choose); puts("");
	switch(choose)
	{
		case 1: Input(stu); break;
		case 2: Output(stu); break;
		case 3: Search_Name(stu); break;
		case 4: Search_Pos(stu); break;
		case 5: Insert(stu); break;
		case 6: Delete(stu); break;
		case 7: Get_Len(stu); break;
		case 8: exit(0);
	    default: printf("\n輸入有誤! 請核對後重新輸如入!!!\n");
		         printf("\n\n輸入回車鍵返回主選單");  getch();
				 break;
	 } 
	 return ;
}
int main()
{	
    system("color 4e"); Student stu[MAXN]; 
	while(1)
	{ 
        system("CLS");
		meau(stu);		
    } 
	return 0;
}
LinkList:
#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
#include<conio.h> 
#include<malloc.h> 

typedef struct Student{
	char name[22],no[22];
	int sco;
}Student;

typedef struct LNode{
     Student date;
     struct LNode *next;
}LNode,*LinkList;	

void Ini(LinkList &L) {
         L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; L->date.sco=0;
} 
void CreateList_R(LinkList &L)
{
	printf("請輸入錄入學生個數: ");         
	int N; scanf("%d",&N);  
    L->date.sco=N; 
	LNode *p=L; int i=0;      
	for(i=1;i<=N;++i)
	{
		LNode *b=(LinkList)malloc(sizeof(LNode)); b->next=NULL; 
		printf("\n請輸入第%d個學生的姓名: ",i); 
		scanf("%s",b->date.name);
		printf("\n請輸入第%d個學生的學號: ",i);
		scanf("%s",b->date.no); 
		printf("\n請輸入第%d個學生的成績: ",i);
		scanf("%d",&b->date.sco); 
		p->next=b; p=b;
	}
	printf("\n資訊錄入成功!");
	printf("\n\n輸入回車鍵返回主選單");
    getch();
}
void TraveList(LinkList &L)
{
	if(L->next==NULL) printf("\n尚未錄入學生資訊,請錄入!!!"); 
	else{
		LNode* p=L->next;
		printf("姓名\t\t學號\t\t成績\n");
		while(p!=NULL)
		{
		    printf("%-16s%-16s%d\n",p->date.name,p->date.no,p->date.sco);
		    p=p->next;
		}
	}
	printf("\n\n輸入回車鍵返回主選單");
    getch();
}
void Search_Name(LinkList &L)
{
	printf("\n請輸入學生姓名:");
	char str[23]; scanf("%s",str); 
    LNode *p=L; 
	while(p->next&&strcmp(str,p->next->date.name)) p=p->next;
	if(p->next) 
        printf("\n該學生的學號為: %s 成績為: %d\n",p->next->date.no,p->next->date.sco);
	else printf("\n找不到該學生資訊!!!\n");
	printf("\n\n輸入回車鍵返回主選單");
    getch(); 
}
void Search_Pos(LinkList &L)
{
	printf("請輸入學生序號: "); int num;
	scanf("%d",&num);  puts("");
	if(num>L->date.sco||num<1) 
		printf("輸入錯誤,請核對後重試!!!\n"); 
	else {
	    LNode *p=L; int i=0;
		while(i<num) {
			p=p->next; ++i;
		}
		printf("學生姓名:%s\n",p->date.name);
	    printf("學生學號:%s\n",p->date.no);
	    printf("學生分數:%d\n",p->date.sco);
	}
    printf("\n\n輸入回車鍵返回主選單");
    getch();
}
void Insert(LinkList &L)
{
	printf("請輸入插入位置: ");
	int pos; scanf("%d",&pos);  puts("");
	if(pos<1||pos>L->date.sco+1) printf("輸入資訊錯誤,請核對後再試!!!\n");
	else{
		LNode *s=(LNode*)malloc(sizeof(LNode)); 
		printf("請輸入要插入的學生的資訊\n");
		printf("姓名: "); scanf("%s",s->date.name);
		printf("學號: "); scanf("%s",s->date.no);
		printf("分數:"); scanf("%d",&s->date.sco);
		
		int i=0; LNode *p=L;
	 	while(i<pos-1) {
	 		p=p->next; ++i;
		}
        s->next=p->next; p->next=s; 		 
		printf("\n插入成功!");  L->date.sco++;
	}
	printf("\n\n輸入回車鍵返回主選單");
    getch();
}
void Delete(LinkList &L)
{
	if(L->date.sco<=0) printf("學生人數為0,請先錄入學生資訊!!!");
	else
	{ 
	    printf("請輸入刪除學生的編號: ");
		int num=0; scanf("%d",&num); puts("");
		if(num<1||num>(L->date.sco+1))
		{
		    printf("輸入有誤,請核對後重試!!!\n");  
		} 
		else{
			int i=1; LNode *pre=L,*s=L->next;
			while(i<num)
			{
			   pre=pre->next; s=s->next; ++i;	
			} 
			pre->next=s->next; free(s);
		    L->date.sco--;	printf("\n刪除成功!");
		} 
	
	 } 
	printf("\n\n輸入回車鍵返回主選單");
	getch();
} 
void Get_Len(LinkList &L)
{
    int len=L->date.sco;
	if(len<=0) printf("學生人數為0,請先錄入學生資訊!!!\n");
	else{
		printf("\n學生總數為: %d\n",len);
	}
	printf("\n\n輸入回車鍵返回主選單");
	getch();
	return ;
}
void Meau(LinkList &L)
{
    int choose;
    printf("--------------------------歡迎使用學生資訊管理系統----------------------------\n\n\n\n");
   	
    printf("1.輸入學生資訊\n");
	printf("2.檢視學生資訊\n");
	printf("3.輸入姓名,查詢學生資訊\n");
	printf("4.輸入學生編號,檢視學生資訊\n");
	printf("5.輸入學生資訊,插入到指定位置\n");
	printf("6.刪除指定位置學生資訊\n");
	printf("7.統計學生個數\n");
	printf("8.退出系統\n"); 
	printf("\n\n請輸入操做所對編號: ");
	scanf("%d",&choose); puts("");
	switch(choose)
	{
		case 1: CreateList_R(L); break;
		case 2: TraveList(L); break;
		case 3: Search_Name(L); break;
		case 4: Search_Pos(L); break;
		case 5: Insert(L); break;
		case 6: Delete(L); break;
		case 7: Get_Len(L); break;
		case 8: exit(0);
		default: printf("\n輸入有誤! 請核對後重新輸如入!!!\n");
		         printf("\n\n輸入回車鍵返回主選單"); getch();
				 break;
	 } 
	 return ;
}
int main()
{
	system("color 4e"); LinkList L; Ini(L);
	while(1)
	{
		system("cls");
		Meau(L); 
	}
	return 0;
}