⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xueji.c

📁 学生学籍管理系统,C源码实现
💻 C
字号:
/////作者:姚伏龙   EMAIL:yfl16882000@yahoo.com.cn
#include"stdio.h"
#include"math.h"
#include"stdlib.h"
#include"string.h"
#define NULL 0            ////定义常量与包所需库函数///////////
#define LEN sizeof(struct node)
struct node
{
	char name[20];      ///字符数组,存放名字/////
	char sex[15];      ///日期结构体birthday 存放生日///
	unsigned long TEL;          ///////无符号长整型TEL存放电话//
	char addr[30];           ////////存放E-MAIL 地址///
	struct node *next;     /////////构成链表所需///
}o={NULL,NULL,NULL,NULL,NULL};
add()
{
	char a[20],b[30];  ////缓冲用语暂存名字与E-MAIL////
    struct node *j,*k,*top;   ///结构体指针变量j,k,top///
    top=&o;    /////////头结点置空
    k=(struct node *)malloc(LEN);  //开辟地址空间
    printf("请输入姓名:");
    scanf("%s",a);  ///将名字存于a数组
    strcpy(k->name,a);   ///用字符串复制函数将a数组复制到k的name成员中//
    printf("请输入性别:");
    scanf("%s",&k->sex);
    printf("请输入电话号码:");
    scanf("%ld",&k->TEL);
    printf("请输入地址:");
    scanf("%s",b);
    strcpy(k->addr,b);  //////////同上//
    k->next=NULL;    ///k结点下一位置置空/////如下语句判断插入位置///
	if(top->next==NULL)   //////头结点下一位置为空时///判断插入位置//
	{                        
		top->next=k;
		k->next=NULL;
	}
    else
	{            ////利用while循环和判断语句判断插入位置///////
		while(top->next!=NULL)   ///////头结点下一位置不空时//
	   {
			j=top; ////暂存头结点///
			top=top->next;///每循环一次top指向下一位置//
			if(strcmp(k->name,top->name)<0)  ////利用strcmp函数比较名字
			{                               /////的大小,若"<0"说明k中名字
				j->next=k;   ///k->name小于p->name//
				k->next=top;  ///若if语句为真插于top之前
				break;
			}
	   }
	  if(k->next==NULL)
	  {
		  if(strcmp(k->name,top->name)<0)  ///同上 
		  {                            
			  j->next=k;
			  k->next=top;
		  }
		  else
		  {                   //////if语句为假时,插入于比k->name大的位置之前//
			  top->next=k;
			  k->next=NULL;
		  }
	  }   ///////由while循环和if判断语句并利用strcmp函数排序
	}
	printf("您的操作已完成\n\n\n\n\n");
}
display()
{
	struct node *top;  ///*局部变量声明*///
    top=&o;  ///头指针取地址,头指针实际为空,数据皆存于其下一位置///
    printf("\n\n姓名               生日            电话          E-mail\n\n");
    if(top->next!=NULL)  ///*判断链表是否为空*//
	{
		while(top->next!=NULL)  ///判断是否已输出完///
		{
			top=top->next;
			printf("%-19s%-15s%-11d%14s%\n",top->name,top->sex,top->TEL,top->addr);
		}
	}
   else 
	   printf("记录为空!\n");///链表为空时,提示///
   printf("\n\n\n\n\n");
}
del(int b)   ///形参b传递删除记录位置///
{
	struct node *top,*p;
    int i=0;///位置记录变量/////
    top=&o;
    while(top->next!=0&&i<b-1)////定位//
	{
		top=top->next;
		++i;
	}
	p=top->next;
    top->next=p->next;///删除////
    free(p);  ///释放删除记录所占空间///
}
modify(int c)
{
	int i=0;   ///记录定位变量中间值
    char a[20],b[20];
    struct node *top;
    top=&o;
    while(top->next!=0&&i<c)
	{
		top=top->next;
		++i;
	}  ////定位判断语句////
    printf("更改后的名字:\n");
    scanf("%s",a);
    strcpy(top->name,a);
    printf("更改后的性别:");
    scanf("%s",top->sex);
    printf("新电话号码:");
    scanf("%ld",&top->TEL);
    printf("您的新地址:");
    scanf("%s",b);
    strcpy(top->addr,b);
}
find()
{
	struct node *top;  ////声明局部变量/////
    char a[20];   ////定义字符数组,存放姓名///
    top=&o;     ///头指针取地址,并置空
    scanf("%s",a);
    while(top->next!=NULL)////循环语句与判断语句一起够成定位功能///
	{
		top=top->next;
        if(strcmp(a,top->name)==0)///利用strcmp比较所输入姓名是否与链表中
		{                         ////记录相同,为真则打印该记录,否则提示未找到
			printf("姓名               生日            电话          E-mail\n\n");
            printf("%-19s%-15s%-11d%14s%\n\n\n\n\n\n",top->name,top->sex,top->TEL,top->addr);
            break;
		}
	}
	if(strcmp(a,top->name)!=0)   ////未找到,提示///
    printf("没有该记录!!!\n\n\n\n");
}
void main()
  {
	 char s1[100];////字符数组,存放所输入的判断密码是否正确
	 char c;  ///局部变量
	 int i,a,b;
	 printf("欢迎使用小龙作品!\n\n 请输入你的密码:");
	 scanf("%s",&s1);////将输入存于数组s1中
	 if(strcmp(s1,"yfl")==0)///判断密码是否正确,为真则进入while循环,密码设置在这里
		 while(1)    //////否则退出
		 {
		 printf("您想做什么?请输入:\n 1:添加新记录\n 2:删除记录\n 3:更改记录\n");
		 printf(" 4:查找记录\n 5:显示记录\n 6:返回\n");
		 c=getchar();
		 switch(c)
		 {
		 case'1':
			 add();///调用添加函数///
			 break;
		 case'2':
			 {
				 printf("请输入位置:");
				 scanf("%d",&a);
				 del(a);///调用删除函数,实现删除////
			 }
			 break;
		 case'3':
			 {
				 printf("请输入位置:");
				 scanf("%d",&b);
				 modify(b);////调用更改函数/////
			 }
			 break;
		 case'4':
			 {
				 printf("请输入姓名:\n\n");
				 find();////调用查找函数////
			 }
			 break;
		case'5':
			display();////调用显示函数,显示链表全部记录
			break;
		   case'6':
			   return;///结束循环////
		 }
		 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -