C语言课程设计

Posted 欣麒骥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言课程设计相关的知识,希望对你有一定的参考价值。

 今天给大家分享一下小编当年大一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");
  











 

以上是关于C语言课程设计的主要内容,如果未能解决你的问题,请参考以下文章

C语言课程设计"学生信息管理系统设计 "怎么做?

C语言程序设计 班级学生成绩管理系统

C语言程序设计学生成绩管理系统

求用C语言编写一个简单的学生信息管理程序和课程设计报告

学生成绩管理系统c

C语言链表问题,作业编程。编好出现问题。高手看下。