学生信息管理系统----线性表

    数据结构线性表实验,学生管理系统,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;
}


  • 10
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值