C语言课程设计 分类: C语言 2014-12-02...

 今天给大家分享一下小编当年大一C语言做的课程涉设计(学生成绩以及基本信息系统)有什么疑问和不懂的可以给我留言
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student 
{
    long num;
    char name[12];
    char phone[11];
    char city[12];
    char postal[6];
    struct student *next ;     
};
long num1,numm;
char name1[12],namee[12],phone1[11],city1[12],cityy[12],postal1[6]; 
typedef struct student *stu;
FILE *fp;
int n,i=0,w;
char ch;
int code ()
{  long a;
   printf("\t\t请输入密码:(你还有2次机会)");
   scanf("%d",&a);
   if(a==123)
   {
printf("轻敲任意键继续");
getch();
    return 1;
   }
   else
   {
     printf("\t\t请重新输入密码:(还有1次机会)");
     scanf("%d",&a);
     if(a==123)
	 {
	  printf("轻敲回车键继续");
	  return 1;
	 }
	 else return 0;
   }

}
  
int menu()
{  
 
    
        printf("+++---------请选择:-----------+++\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("+++---------0.退出客户端-------------+++\n");
		   scanf("%s",&ch);
		  return ch;
            
}
//第1个功能的实现: 
struct student *p()
{  
   struct student *head,*p1,*p2;
   n=0;
   p1=p2=(stu)malloc(sizeof(struct student ));
   head=NULL;
   system("cls");
   printf("以学号为000结束。\n");
   while(1)
   {  
       printf("请输入学生的基本信息:学号、姓名、电话、城市、邮编\n");
       scanf("%d",&p1->num);
	   if(p1->num==000)
		   break;
	   scanf("%s %s %s %s",p1->name,p1->phone,p1->city,p1->postal);
       n=n+1;
       if(n==1)
       head=p1;
       else
       p2->next=p1;
       p2=p1;
       p1=(stu)malloc(sizeof(struct student )); 
   }
       p2->next=NULL;
       return (head);
}
//第2个查找的功能的实现:


void s(stu head);
void s1(stu head)//1、用学号来查找信息。
{ 
  stu p1;
  int j=0;
  p1=(stu)malloc(sizeof(struct student ));
  printf("请输入要查找学生的学号:\n");
  scanf("%ld",&num1);
  p1=head;
  while(p1!=NULL)
  {
    if(p1->num==num1) 
	{  
	   j=1;
	   printf("学号:%d 姓名:%s  电话:%s  城市:%s 邮编:%s\n",p1->num,p1->name,p1->phone,p1->city,p1->postal); 
	   break;
	}
	p1=p1->next;
  }
  if(j==0)
	printf("没有找到你要查找学生的信息。\n");
  else
	printf("这是你要查找学生的信息:\n");
  system("pause");
  s(head);
}

void s2(stu head)
{
  stu p1;
  int j=0;
  p1=(stu)malloc(sizeof(struct student));
  printf("请输入要查找学生的姓名:\n");
  scanf("%s",name1);
  p1=head;
  while(p1!=NULL)
  {
	if((strcmp(p1->name,name1))==0) 
	{ 
	   j=1;
	   printf("学号:%d 姓名:%s  电话:%s  城市:%s 邮编:%s\n",p1->num,p1->name,p1->phone,p1->city,p1->postal);
	}
	p1=p1->next;
  }
  if(j==0)
	printf("sorry   没有找到你要查找学生的信息。\n");
  else
	printf("你看,这是你想要的信息吗?\n");
  system("pause");
  s(head);
}
 
void s3(stu head)
{
  stu p1;
  int j=0;
  p1=(stu)malloc(sizeof(struct student ));
  printf("请输入要查找学生的城市:\n");
  scanf("%s",city1);
  p1=head;
  while(p1!=NULL)
  {
     if((strcmp(p1->city,city1))==0) 
	 { 
		j=1;
		printf("学号:%d 姓名:%s  电话:%s  城市:%s 邮编:%s\n",p1->num,p1->name,p1->phone,p1->city,p1->postal);
	 }
	 p1=p1->next;
   }
   if(j==0)
	 printf("sorry  没有找到你要查找学生的信息\n");
   else
	 printf("这是你要查找学生的信息吗?\n");
   system("pause");
   s(head);
}

void s(stu head)
{ 
   system("cls");
   printf("********请输入你想查找的方式********\n");
   printf("********    1.以学号查找    ********\n");
   printf("********    2.以姓名查找    ********\n");
   printf("********    3.以城市查找    ********\n");
   printf("********    4.返回          ********\n");
   scanf("%d",&w);
   switch(w)
   {
     case 1:s1(head);break;
	 case 2:s2(head);break;
	 case 3:s3(head);break;
	 case 4:menu();break;
	 default:{printf("你的输入有错,请重新输入\n");system("pause");s(head);}
   }
}
//用学生学号方尺删除:
stu delet(stu head);

void delete1(stu head)
{
   stu p1,p2;
   int j=0;
   p2=p1=(stu )malloc(sizeof(struct student));
   printf("请输入要删除学生的学号:\n");
   scanf("%d",&num1);
   p2=p1=head;
   if(head->num==num1&&head!=NULL) 
   {   
      head=head->next;
      free(p1);
      i--;
	  j=1;
   }
   else
   {  
      p1=head->next;
	  if(p1!=NULL)
      {
	  while(p1->num!=num1)
      {
         p2=p1;
         p1=p1->next;
      }
      p2->next=p1->next;
      free(p1);
      i--;
	  j=1;
	  }
   }
   if(j==0)
	 printf("此通讯信息不存在,删除的失败!\n");
   else
	 printf("删除成功!\n");
   system("pause");
   delet(head);
}
/*用学生姓名的方尺查找*/ 
void delete2(stu head)
{
	stu p1,p2;
	int j=0;
    printf("请输入要删除学生的姓名:\n");
    scanf("%s",name1);
    p2=p1=head;
    if(head!=NULL&&(strcmp(head->name,name1))==0)
    {   
       head=head->next;
       free(p1);
       i--;
	   j=1;
    }
    else
    {  
       p1=head->next;
	   if (p1!=NULL)
	   {
       while(p1!=NULL&&(strcmp(p1->name,name1))!=0)
       {
         p2=p1;
         p1=p1->next;
       }
       p2->next=p1->next; 
       free(p1);
	   j=1;
       i--;
	   }
    } 
	if(j==0)
	    printf("此学生不存在,删除的失败!\n");
	else
		printf("删除成功!\n");
    system("pause");
	 delet(head);
} 

stu delet(stu head)
{   
   system("cls");
   printf("********请输入你想删除的方式********\n");
   printf("********    1.以学号查找    ********\n");
   printf("********    2.以姓名查找    ********\n");
   printf("********    3.返回          ********\n");
   scanf("%d",&w);
   switch(w)
   {
     case 1:delete1(head);break;
	 case 2:delete2(head);break;
	 case 3:menu();return head;
	 default:{printf("你的输入有错,请重新输入\n");system("pause");delet(head);}
   }
}
/*实现第5个功能,添加信息功能。 */

stu add(stu head);

//1、按学号添加 
void add1(stu head)
{
   struct student *p1,*p,*p2;
   int j=0;
   p1=p2=(stu )malloc(sizeof(struct student ));
   p=(stu )malloc(sizeof(struct student ));
   printf("请输入你要添加学生的位置:\n");
   printf("如果想放在头,请输入0,  否则请输入要添加前一个学生的学号:\n");
   scanf("%d",&numm);
   printf("请输入要添加学生的信息:\n");
   scanf("%d %s %s %s %s",&num1,name1,phone1,city1,postal1);
   if(numm==0)
    {  
     p1=head;
     p->num=num1;
     strcpy(p->name,name1);
     strcpy(p->phone,phone1);
     strcpy(p->city,city1);
     strcpy(p->postal,postal1);
	  head=p;
	  p->next=p1;
     i++;
	  j=1;
     }
   else
	{
	  p1=head;
     p2=p1->next;
	 if(p1!=NULL)
	 {
	  while(p1->num!=numm)
	  {    
		 p1=p2;
		 p2=p1->next;
	  } 
	 p->num=num1;
     strcpy(p->name,name1);
     strcpy(p->phone,phone1);
     strcpy(p->city,city1);
     strcpy(p->postal,postal1);
     p1->next=p;
	 p->next=p2;
	 i++;
	 j=1;
	}
   }
	if(j==0)
	  printf("你要添加的位置不存在,添加失败!\n");
	else
	  printf("添加成功!\n");
   system("pause");
   add(head);  
}

//2、按姓名(适用于按姓名字母排序)
void add2(stu head)
{
   struct student *p1,*p,*p2;
   int j=0;
   p1=p2=(stu )malloc(sizeof(struct student ));
   p=(stu )malloc(sizeof(struct student ));
    printf("请输入你要添加学生的位置:\n");
     printf("如果想放在头,请输入h,  否则请输入要添加前一个学生的姓名:\n");
     scanf("%s",namee);
     printf("请输入要添加学生的信息:\n");
     scanf("%d%s%s%s%s",&num1,name1,phone1,city1,postal1);
     if(namee[0]=='h')
      {  
       p1=head;
       p->num=num1;
       strcpy(p->name,name1);
       strcpy(p->phone,phone1);
       strcpy(p->city,city1);
       strcpy(p->postal,postal1);
	    head=p;
	    p->next=p1;
       i++;
	   j=1;
     }
    else
	  {    
	       p1=head;
          p2=p1->next;
		if(p1!=NULL)
		{
		while((strcmp(p1->name,namee))!=0)
		{    
		    p1=p2;
		    p2=p1->next;
		} 
		   p->num=num1;
         strcpy(p->name,name1);
         strcpy(p->phone,phone1);
         strcpy(p->city,city1);
         strcpy(p->postal,postal1);
		   p1->next=p;
		   p->next=p2;
		   i++;
		   j=1;
	  }
	 }
	   if(j==0)
		  printf("你要添加的位置不存在,添加失败!\n");
	   else
		   printf("添加成功!\n");
	   system("pause");
      add(head);  
}

//3、按城市
void add3(stu head)
{
     struct student *p1,*p,*p2;
	  int j=0;
     p1=p2=(stu )malloc(sizeof(struct student ));
     p=(stu )malloc(sizeof(struct student ));
     printf("请输入你要添加学生的位置:\n");
     printf("如果想放在头,请输入h,  否则请输入要添加前一个学生的城市:\n");
     scanf("%s",cityy);
     printf("请输入要添加学生的信息:\n");
     scanf("%d%s%s%s%s",&num1,name1,phone1,city1,postal1);
     if(cityy[0]=='h')
      {  
       p1=head;
       p->num=num1;
       strcpy(p->name,name1);
       strcpy(p->phone,phone1);
       strcpy(p->city,city1);
       strcpy(p->postal,postal1);
	    head=p;
	    p->next=p1;
       i++;
	   j=1;
     }
    else
	  {
	       p1=head;
          p2=p1->next;
		if(p1!=NULL)
		{
		while((strcmp(p1->city,cityy))!=0)
		{    
		    p1=p2;
		    p2=p1->next;
		}
		   p->num=num1;
         strcpy(p->name,name1);
         strcpy(p->phone,phone1);
         strcpy(p->city,city1);
         strcpy(p->postal,postal1);
		   p1->next=p;
		   p->next=p2;
		   i++;
		   j=1;
		}
	 }
	 if(j==0)
		printf("你要添加的位置不存在,你的操作失败!\n");
	 else
		printf("恭喜你,添加成功!\n");
    system("pause");
    add(head);  
}

stu add(stu head)
{  
   system("cls");
   printf("********请输入你想添加的方式********\n");
   printf("********    1.以学号添加   ********\n");
   printf("********    2.以姓名添加   ********\n");
   printf("********    3.以城市添加   ********\n");
   printf("********    4.返回          ********\n");
   scanf("%d",&w);
   switch(w)
   {
    case 1:add1(head);break;
	 case 2:add2(head);break;
	 case 3:add3(head);break;
	 case 4:menu();return head;
	 default:{printf("选择有错,请重新选择\n");system("pause");add(head);}
   }
}
//更改内容:
//学号更改;
//以姓名更改;
stu modify(stu head);
void modify1(stu head)
{
   struct student *p1;
   int j=0;
   p1=(stu )malloc(sizeof(struct student ));
   printf("请输入你要更改学生的学号:\n");
   scanf("%d",&numm);
   printf("请输入要更改学生的信息:\n");
   scanf("%d%s%s%s%s",&num1,name1,phone1,city1,postal1);
   p1=head;
   if(head->num==numm) 
    {   
     head->num=num1;
     strcpy(head->name,name1);
     strcpy(head->phone,phone1);
     strcpy(head->city,city1);
     strcpy(head->postal,postal1);
	  j=1;
    }
   else
    { 
     p1=head->next; 
	 if(p1!=NULL)
	 {
     while(p1->num!=numm)
      {
       p1=p1->next;
      }
     p1->num=num1;
     strcpy(p1->name,name1);
     strcpy(p1->phone,phone1);
     strcpy(p1->city,city1);
     strcpy(p1->postal,postal1);
	 j=1;
	 }
    }
	if(j==0)
	  printf("没有找到你要更改的学生,更改失败!\n");
	else
	  printf("更改成功!\n");
	system("pause");
   modify(head); 	  
}

void modify2(stu head)
{
   struct student *p1;
   int j=0;
   p1=(stu )malloc(sizeof(struct student ));
   printf("请输入你要更改学生的姓名:\n");
   scanf("%s",namee);
   printf("请输入要更改学生的信息:\n");
   scanf("%d%s%s%s%s",&num1,name1,phone1,city1,postal1);
   p1=head; 
   if((strcmp(head->name,namee))==0) 
    {   
     head->num=num1;
     strcpy(head->name,name1);
     strcpy(head->phone,phone1);
     strcpy(head->city,city1);
     strcpy(head->postal,postal1);
	  j=1;
    }
   else
    { 
     p1=head->next;
	 if(p1!=NULL)
	 {
     while((strcmp(p1->name,namee))!=0)
      {
       p1=p1->next;
      }
     p1->num=num1;
     strcpy(p1->name,name1);
     strcpy(p1->phone,phone1);
     strcpy(p1->city,city1);
     strcpy(p1->postal,postal1);
     j=1;
	 }
    }
	if(j==0)
	  printf("没有找到你要更改的学生,更改失败!\n");
	else
	   printf("更改成功!\n");
	system("pause");
   modify(head);   
}
stu modify(stu head)
{  
   system("cls");
   printf("********请输入你想更改的方式********\n");
   printf("********    1.以学号更改   ********\n");
   printf("********    2.以姓名更改    ********\n");
   printf("********    3.返回          ********\n");
   scanf("%d",&w);
   switch(w)
   {
     case 1:modify1(head);break;
	 case 2:modify2(head);break;
	 case 3:menu();return head;
	 default:{printf("选择有错,请重新选择\n");system("pause");modify(head);}
   }
}
void display(stu head)
{   stu p;
    printf("\n这里有%d个学生的信息:\n",n+i);
    p=head;
    while(p!=NULL)
    { 
        printf("%d %s %s %s %s\n",p->num,p->name,p->phone,p->city,p->postal);
        p=p->next;                 
    }     
}

void write_file(stu p)//6.保存信息,写入文件
{

    FILE *fp= fopen("王欣欣.txt","wb");//b
    system("cls");
	while(p)
	{  
		fwrite(p,sizeof(struct student),1,fp);//把p指向的内存中的东西复制到磁盘里
		p = p->next;
	}
	
	fclose(fp);
}

stu read_file(void)//读出文件
{
	FILE *fp;
    stu p1,p2,head;
	fp= fopen("王欣欣.txt","rb");
   	head = p2 = p1=(stu)malloc(sizeof(struct student));
   	system("cls");
      while(fread(p1,sizeof(struct student),1,fp))
	{
        printf("%d %s %s %s %s\n",p1->num,p1->name,p1->phone,p1->city,p1->postal);
		p2->next = p1;
		p2 = p1;
	   	p1=(stu)malloc(sizeof(struct student));
	}
	p2->next=NULL;
	fclose(fp);
	return head;
}

int main()

{ 
   
	stu head;
    head=NULL;
    if(code ()==0)
		return 0;
	system("cls");
    printf("**********欢迎进入通讯客户端!**********\n");
    printf("----------------------- 祝你使用愉快!\n");
	system("pause");
    while(1)
	switch (menu())
	{
	   case'1':head=p();system("pause");break;
	   case'2':s(head);break;
	   case'3':head = delet(head);system("pause");break;
	   case'4':head = modify(head);system("pause");break;
	   case'5':head = add(head);system("pause");break;
	   case'6':display(head);system("pause");break;
	   case'7':write_file(head);system("pause");break;
	   case'8':head=read_file();system("pause");break;
	   case'0':printf("Thanks Goodbay\n");getch();return 0; 
	   default:printf("选择有错,请重新选择\n");
  }
}










 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/xinxinit/p/4677834.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值