学生信息管理系统代码全篇

/*学生信息管理系统*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<winbase.h>
#include<time.h>
#include<conio.h>
#define Maxword 20
/**/ 
typedef struct node
{
    char name[20];//名字
    char address[40];//家庭地址 
    char phone[15];//电话号码 
    long zip;//邮编
    struct node *next;// 指向结构体的指针 
  }add_list;
struct person//备用结构体 
{
    char name[20];
    char address[40];
    char phone[15];
    long zip;
 };
 FILE *fp;//指向文件地址的指针 
 add_list *tail,*head;//定义链表的尾结点指针与头指针;
 /*从文件中读出数据生成通讯录链表,如果文件不存在,则生成空链表*/
 add_list *load(char filename[])
 {    
     add_list *new1,*head;//结构体指针 
     struct person t;//结构体变量 
    head=(add_list*)malloc(sizeof(add_list));//给头节点创建存储空间 
    tail=head=NULL;//初始化头节点尾节点 
    if((fp=fopen(filename,"rb"))==NULL) 
    //如果读取到的链表数据为空则返回头节点,此时头节点自身也为空; 
    {
        return head;
     }
     else
     {
         if(!feof(fp))//文件结束标识符
         {
             if(fread(&t,sizeof(struct person),1,fp)==1)//
             {
                 new1=(add_list*)malloc(sizeof(add_list));//创建链表第一个节点
                strcpy(new1->name,t.name);//strcpy(a,c);将c中的数据复制到strcpy中; 
                strcpy(new1->address,t.address);//将t中的地址赋值给new1 
                strcpy(new1->phone,t.phone);
                new1->zip=t.zip;
                head=tail=new1;
                new1->next=NULL;
                while(!feof(fp))//连入链表其他节点 
                {
                    //fread(void *buffer,int size,int count,FILE *fp);
                    /*fread()──从fp所指向文件的当前位置开始,
                一次读入size个字节,重
                复count次,并将读入的数据存放到从buffer开始的内存中;
                 buffer是存放读入数据的起始地址(即存放何处)
                */
                    if(fread(&t,sizeof(struct person),1,fp)==1)
                    {
                        new1=(add_list*)malloc(sizeof(add_list));
                        strcpy(new1->name,t.name);
                        strcpy(new1->address,t.address);
                        strcpy(new1->phone,t.phone);
                        new1->zip=t.zip;
                        
                        tail->next=new1;
                        new1->next=NULL;
                        tail=new1;
                     } 
                }
             }
         }
      }
      fclose(fp);//关闭文件指针 结束文件
      return head; 
  } 
 //从文件中读出数据生成通讯录链表,若不存在则空链表;
/*进度条打印*/ 
void jindutiao()
{
    int i;
    for(i=0;i<90;i++)
    {
        putchar('.');//一直打印该界面 
    }
    printf("\r\a");//响铃操作 
    for(i=0;i<90;i++)
    {
        if(i==0)
        {
            putchar('|');
        }
        Sleep(100);
        printf("\b|>");
    }
//    return;
}
/*插入一条通讯录记录*/
 void insert(add_list **head)
 {
     add_list *new1;
     new1=(add_list*)malloc(sizeof(add_list));
     system("cls");
     printf("请输入姓名:");
    getchar();
    gets(new1->name);
     /*gets函数用法: 
      从标准输入设备读字符串函数,
      可以无限读取,不会判断上限,以回车结束读取。
     所以如果输入的字符串超过100个,
     它也不会做检测,此时就会发生溢出。*/
     //scanf("%s")
    printf("\n 请输入地址:");scanf("%s",new1->address);
    printf("\n 请输入电话:");scanf("%s",new1->phone);
    printf("\n 请输入邮编:");scanf("%d",&new1->zip);
    if(*head==NULL)//如果此时表头为空 
    {
        *head=new1;//此时数据类型一致,将new1的地址赋值给head 
        new1->next=NULL;//new1->next指向;
        tail=new1;
    }/*使用的是尾插法*/
    else//插入到表尾 
    { 
    tail->next=new1;//将尾节点->next赋值给即将插入的节点new1;
    new1->next=NULL;
    tail=new1;
 }
     printf("输入完成,按回车键返回......");
    getchar();
    getchar(); 
 //    return;
 }
 /*将通讯录表中的内容保存到指定文件*/
void save(add_list *head,char filename[])
{
    add_list *p;//结构体指针 
    struct person t;//创建结构体变量
    if((fp=fopen(filename,"wb"))==NULL)//如果写入的数据为空
    {
        printf("错误,不能打开文件%s\n",filename);
        printf("已退出\n");
        exit(1); 
        }
    else
    {
        p=head;//将地址传给p;p就指向头节点;
        while(p!=NULL)
        {
            strcpy(t.name,p->name);//复制p给t函数 
            strcpy(t.address,p->address);
            strcpy(t.phone,p->phone);
            t.zip=p->zip;
            fwrite(&t,sizeof(struct person),1,fp);
            p=p->next;
         } 
     }
     fclose(fp);
     printf("保存成功,按返回键返回......");
     getchar();getchar();//? 
     //return;
}
/*显示通讯录内容*/
void display(add_list *head)
{
    add_list *p;
    p=head;
    if(p!=NULL)
    {
        printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n");
        //printf("对不起")
     }
     while(p!=NULL)
     {
         printf("%s\t\t%s\t\t%d\t\t\%s\n",p->name,p->address,p->zip,p->phone);
         p=p->next;
     }
     printf("请输入回车键返回......");
     getchar();
     getchar();
}
/*按姓名查询通讯录记录*/ 
int search(add_list *head)
{
    add_list *p; 
    char name[20];
    int flag=0;
    printf("请输入你要查询的同学姓名:\n");
    getchar();
    gets(name);//无限制接收数据
    p=head;
    while(p!=NULL)
    {
        if(strcmp(name,p->name)==0)
        {
            printf("姓名:\t\t住址:\t\t邮编\t\t电话\n");
            printf("%s\t\t%s\t\t%d\t\t%s\n",p->name,p->address,p->zip,p->phone);
            flag=1;
        }
        p=p->next;//不能else也并不是else 
     }
//     if(p==NULL)
//     {
//         printf("\n对不起,系统查无此人02\n");
//      } 
     return flag;
}
/*按姓名删除一条通讯录信息*/
int delete1(add_list **head)
{
    add_list *p,*q,*t;
    char name[20],c;
    int flag=0;
    printf("请输入要删除人的姓名:");
    scanf("%s",name);
    q=p=*head;
    while(p!=NULL)
    {
        if(strcmp(name,p->name)==0)
        {
            printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n");
            printf("%s\t\t%s\t\t%1d\t\t%s\n",p->name,p->address,p->zip,p->phone);
            printf("真的要删除吗?(Y:是;N:否)\n");
            getchar();
            c=getchar();
            if(c=='Y'||c=='y')
            {
                if(p==*head)
                {
                    printf("已经成功删除%s信息02\n",p->name);
                    system("pause");
                    *head=p->next;//
                }
                else
                {
                    printf("已经成功删除%s信息01\n",p->name);
                    system("pause");
                    q->next=p->next;
                }
                t=q;
                p=p->next;
                free(t);
                flag=1;
            }
            else
            {
                q=p;
                p=p->next;
                flag=1;
            }
        }
        else
        {
            q=p;
            p=p->next;
        }
    }
    return flag;
    printf("按回车键返回......");
    getchar();
}
void password()
{
    char pass_word[Maxword]="abc123456";//密码本
    char pass_input[20];
    int i;
    int j;
    char c;//输入密码变量 
    for(i=3;i>=1;i--)
    {
        j=0;
        printf("请输入你的登录密码,你还有%d次机会\n",i);
        while((c=getch())!='\r')//回车键结束运行
        {/*isprint判断输入的c是否是一个不可打印的字符*/
            if(j<Maxword&&isprint(c))
            {
                pass_input[j++]=c;
                //把在getch存入的密码存入pass_input数组当中;
                //存一个,打印一个,直到敲下回车键结束;
                putchar('*');
            }
            else if(j>0&&c=='\b')
            {
                //这里是指如果你乱的输密码
                //比如退格键它也会识别为密码的输入;
                j--;//如果输入的是退格键,则不存入数组;
                putchar('\b');//此时打印无;
                putchar(' ');
                putchar('\b');
                     }    
         }
         putchar('\n');//打印\n
         pass_input[j]='\0';//添加字符结束符;
         /*字符串比较函数相等就是0*/
         int spot;
         if(strcmp(pass_input,pass_word)==0)
         {
             system("cls");
             printf("\t\t欢迎使用学生信息管理系统");
             putchar('\a');
             //打印点点; 
             for(spot=0;spot<3;spot++);
             {
                 putchar('.');
                 Sleep(500);
             }
             for(spot=0;spot<3;spot++);
             {
                 putchar('.');
                 Sleep(500);
             }
             break;
             
          }
          else if(i>1)
          {
              printf("输入密码有误!请重新输入!\n");
              continue;
           }
           
         
    }
    if(i==0)
     {
        printf("您输入的次数已用完,已经退出\n");
        exit(0);
        }
    return;
}
/*显示菜单并选择菜单项*/
int menu_select()
{
    char c;
    system("cls");
    printf("\t\t\t******通讯录******\n");
    printf("\t\t\t1:输入新的通讯记录\n");
    printf("\t\t\t2:删除记录\n");
    printf("\t\t\t3:查找\n");
    printf("\t\t\t4:保存文件\n");
    printf("\t\t\t5:浏览所有通讯录记录\n");
    printf("\t\t\t6:退出\n");
    do{
        printf("请输入你的选择(1-6):");
        c=getchar();
    }while(c<'1'||c>'6');//如果满足条件则跳出循环; 
    return c;
}
int main(void)
{
    char filename[50];
    char c;
    int t;
    password();
    printf("通讯录启动中------\n");
    //jindutiao(); //缓冲界面
    system("cls");
    printf("请输入通讯录文件名称:\n");
    scanf("%s",filename);//输入文件名字;
    getchar();//将enter吸收掉 
    head=load(filename);//接收通讯录的文件名; 
    while(1)//表示大于0的时候; 
    {
        c=menu_select();//通过main函数输入菜单选项以及文件地址
        //scanf("%d",&c);
        //menu_select(filename,a);
        //c=menu_select();
        //menu_select(head);
        
    switch(c)
    {
        case '1':insert(&head);break;//输入信息 
        case '2':t=delete1(&head);//删除信息 
        if(!t)//如何与t挂钩的 
        {
            printf("对不起!系统没有此人信息\n按回车键返回!...");
            system("pause"); 
        }
        getchar();
        break;
        case '3':t=search(head);//查询信息 
        if(!t){
            printf("天啊!居然没有找到此人信息02\n按回车键返回......");
        }
        getchar();
        break;
        case '4':save(head,filename);break;//保存信息 
        case '5':display(head);break;//输出信息 
        case '6':printf("已安全退出");exit(0);//退出 
         }     
     } 
//    return 0;
 }

/*不用感谢我,叫我雷锋即可!*/

vs2015+数据库,需要建的数据表如下: 1. “考试成绩管理系统用户登录”功能 具体要求: (1) 按照图示排列相应的控件,控件名称自定义,其中,界面中的图片可以不加; (2) 当输入正确的用户名和密码时,登录到主系统,如图所示,并且用户名或密码输入不正确时系统有所提示;当单击【取消】按钮时,用户名和密码被清空; (3) 程序中用到的数据库名为SCOREINFO,数据表名为userinfo,数据表结构如下图所示: (4) 数据表中的用户名和密码如下图。 2. 点击主窗体的“密码修改”菜单,完成“密码修改”功能,程序运行如下图所示: 具体要求: (1)此题必须使用数据库连接完成,原始密码必须为数据表里原有的数据,不使用数据库完成的为0分。 (2)需要建立数据库SCOREINFO及数据表userinfo,表的结构及数据第一部分的内容: (3)要有“原始密码输入错误”、“原始密码不能为空”及“两次输入密码不一致”的错误提示; (4)当单击【保存】按钮,新密码被更新到数据表中,不能更新的为0分; (5)单击【关闭】按钮,窗口关闭。 (6)3个Label;3个TextBox;2个Button 3. 完成“成绩查询”功能,程序运行如下图所示: 具体要求: (1) 按照图示排列相应的控件,界面下方是DataGridView控件; (2)程序用到的数据库名为SCOREINFO,数据表名为score,表结构如下: (3)完成的MainForm_Load事件处理程序:当加载窗体时,直接在窗体的dataGridView1控件中显示数据表的所有记录; (4)可以设查询条件:首先在组合框comboBox1中选择查询条件,并在textBox1中输入条件值(可以模糊查询,如按照姓名查询时,输入“王”,可以查所有姓王的同学的成绩),单击查询将结果显示在dataGridView1控件中。 (5)所需控件及属性:1个GroupBox,1个Label,Text为选择查询条件;1个ComboBox(Items:学号、姓名);1个TextBox;1个Button,Text为查询;1个DataGridView 4. 完成“课程信息修改”功能,程序运行如下图所示: 具体要求: (1)按照图示排列相应的控件,控件名称自定义,其中,程序刚开始运行时,“学分”和“课程编码”的文本框是只读的; (2)在数据库名为SCOREINFO中,创建数据表名为course,表结构如下: (3)当单击【查询】时,直接在窗体的dataGridView2控件中显示数据表的所有记录; (4)当选中DataGridView控件中的某一行记录时(DataGridView控件的Mouse_Click事件),“课程名字”、“学分”、“课程代码”文本框中分别显示该项对应的课程信息; (5)当选中某一行记录并单击【编辑】按钮时,【编辑】按钮变为【保存修改】,同时“学分”和“课程编码”的文本框恢复正常(ReadOnly属性为false);在文本框中修改相应的信息后单击【保存修改】,将修改后的数据更新到数据表中。 (6)所需控件及属性:1个GroupBox,3个Label;3个TextBox(textBox2属性ReadOnly为True,textBox3属性ReadOnly为True);2个Button;1个DataGridView 5. 完成“课程信息删除”功能,程序运行如下图所示: 具体要求: (1)按照图示排列相应的控件,控件名称自定义,其中,程序刚开始运行时,“学分”和“课程编码”的文本框是只读的; (2)数据表名为course,表结构同第4部分: (3)当单击【查询】时,直接在窗体的dataGridView控件中显示数据表的所有记录; (4)当选中DataGridView控件中的某一行记录时,“课程名字”、“学分”、“课程代码”文本框中分别显示该项对应的课程信息; (5)当选中某一行记录并单击【删除】按钮时,则该行从数据表中删除。 (6)所需控件:3个Label;3个TextBox(textBox2属性ReadOnly为True,textBox3属性ReadOnly为True);2个Button;1个DataGridView 6. 完成“课程信息添加”功能,程序运行如下图所示: 具体要求: (1)按照图示排列相应的控件,控件名称自定义; (2)程序用到的数据库和数据表名为course,表结构如下同第四部分: (3)当单击【查询】时,直接在窗体的dataGridView1控件中显示数据表的所有记 (4)当选中DataGridView控件中的某一行记录时,“课程名字”、“学分”、“课程代码”文本框中分别显示该项对应的课程信息; (5)当单击【添加】按钮时,在文本框中添加新的内容并将新内容添加到数据表中,并且在DataGridView控件中显示出新的课程信息 (6)所需控件:3个Label;3个TextBox;2个Button;1个DataGridView
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值