2023-2-9学生信息管理

在这里插入图片描述

//main.c
#include "head.h"
int main(int argc, const char *argv[])
{
	printf("id为学生的唯一标识,不会重复\n");
	printf("按年龄排序后折半查找只能返回第一个符合条件的值\n");
	Seqlist *l = Create();
	while(1){
		printf("================\n");
		printf("1.尾插插入学士信息\n");
		printf("2.输入姓名,删除对应学生信息\n");
		printf("3.顺序表打印\n");
		printf("4.按学生姓名排序\n");
		printf("5.年龄升序排序,并按年龄查找\n");
		printf("6.哈希存储,按手机号查询\n");
		printf("7.退出系统\n");
		printf("================\n");
		int res;
		printf("请输入序号:");
		scanf("%d",&res);
		if(res==7)
			break;
		switch(res){
			case 1:{InsertRear(l);break;}
			case 2:{DeleteByName(l);printf("删除操作执行后学生信息如下:\n");Show(l);break;}
			case 3:{printf("当前学生信息如下:\n");Show(l);break;}
			case 4:{SortByName(l);printf("姓名排序后学生信息如下:\n");Show(l);break;}
			case 5:{QuickSort(l,0,l->len-1);printf("年龄排序后学生信息如下:\n");Show(l);SeachByAge(l);break;}
			case 6:{
					printf("请输入待查找的手机号码:");
					int phone;
					int hashlen;
					scanf("%d",&phone);
					for(int i=l->len*4/3;i>=1;i--){
						int flag = 0;
					for(int j=2;j<i;j++){
						if(i%j==0){
							flag = 1;
							break;
					}
					}
					if(flag == 0){
						hashlen = i;
						break;
					}
					}
					Node hash[hashlen];
					for(int i=0;i<hashlen;i++){
					hash[i]=NULL;
					}
					InsertHash(hash,l,hashlen);
					HashSearch(hash,phone,hashlen);
					//hash空间释放
					for(int i=0;i<hashlen;i++){
						while(hash[i]!=NULL){
							Node p = hash[i];
							hash[i] = p->next;
							free(p);
							p=NULL;
						}
					}
					break;
                    }
			default:{printf("输入序号错误,请重新输入\n");}
			 }	
		}
		//顺序表空间释放
		free(l);
		l=NULL;
	return 0;
}
//head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{
	int id;
	char name[20];
	int age;
	float score;
	char phone[20];
}Student;
typedef struct
{
	int len;
	Student data[MaxSize];
}Seqlist;
typedef struct node
{
	Student s;
	struct ndoe *next;
}*Node;
Seqlist *Create();
void InsertRear(Seqlist *l);
void Show(Seqlist *l);
void DeleteByName(Seqlist *l);
void SortByName(Seqlist *l);
void QuickSort(Seqlist *l,int low,int high);
int quick(Seqlist *l,int low,int high);
void InsertHash(Node hash[],Seqlist *l,int hashlen);
void HashSearch(Node hash[],int phone,int hashlen);
void SeachByAge(Seqlist *l);
#endif
//test.c
#include "head.h"
Seqlist *Create()
{
	Seqlist *l = (Seqlist *)malloc(sizeof(Seqlist));
	if(l==NULL)
		return NULL;
	l->len = 0;
	return l;
}
void InsertRear(Seqlist *l)
{
	if(l==NULL){
		printf("结构体指针创建失败,插入失败\n");
		return ;
	}
	if(l->len==MaxSize){
		printf("顺序表满,插入失败\n");
		return ;
	}
	Student s;
	printf("请输入学生id:");
	scanf("%d",&s.id);
	for(int i=0;i<l->len;i++){
		if(l->data[i].id==s.id){
			printf("该学生信息已存在,请勿重复插入\n");
			return;
		}
	}
	printf("请输入学生姓名:");
	scanf("%s",s.name);
	printf("请输入学生年龄:");
	scanf("%d",&s.age);
	printf("请输入学生分数:");
	scanf("%f",&s.score);
	printf("请输入学生电话号码:");
	scanf("%s",s.phone);
	l->data[l->len++] = s;
}
void Show(Seqlist *l)
{
	for(int i=0;i<l->len;i++){
		printf("学生的id为:%d,姓名为:%s,年龄为:%d,分数为:%.2f,电话号码为:%s\n",l->data[i].id,l->data[i].name,l->data[i].age,l->data[i].score,l->data[i].phone);
	}
}
void DeleteByName(Seqlist *l)
{
	printf("请输入要删除的学生姓名:");
	char name[20];
	scanf("%s",name);
	int len = l->len;
	int i=0;
	while(i<len){
		if(strcmp(l->data[i].name,name)==0){
			for(int j=i+1;j<=l->len;j++){
				l->data[j-1] = l->data[j];
			}
			l->len--;
			i--;
		}
		i++;
	}
}
void SortByName(Seqlist *l)
{
	int i,j;
	for(i=1;i<l->len;i++){
		Student temp = l->data[i];
		for(j=i-1;j>=0&&strcmp(temp.name,l->data[j].name)<0;j--){
			l->data[j+1] = l->data[j];
		}
		l->data[j+1] = temp;
	}
}
void QuickSort(Seqlist *l,int low,int high)
{
	if(low<high){
		int mid = quick(l,low,high);
		QuickSort(l,low,mid-1);
		QuickSort(l,mid+1,high);
	}
}
int quick(Seqlist *l,int low,int high)
{
	Student key = l->data[low];
	while(low<high){
		while(low<high&&key.age<=l->data[high].age){
			high--;
		}
		l->data[low] = l->data[high];
		while(low<high&&key.age>=l->data[low].age){
			low++;
		}
		l->data[high] = l->data[low];
	}
	l->data[high] = key;
	return high;
}

void InsertHash(Node hash[],Seqlist *l,int hashlen)
{
	for(int i=0;i<l->len;i++){
		Node p =(Node)malloc(sizeof(struct node));
		if(p==NULL)
			return ;
		p->s = l->data[i];
		p->next = NULL;
		int num=0;//phone转为int类型
		char *q = l->data[i].phone;
		while(*q!='\0'){
			num  = num*10+(*q-'0');
			q++;
		}
		int sub = num%hashlen;
		p->next = hash[sub];
		hash[sub] = p;
	}
}
void HashSearch(Node hash[],int phone,int hashlen)
{
	int sub = phone%hashlen;
	int flag = 0;
	Node p = hash[sub];
	while(p){
		int sum = 0;
		char *q = p->s.phone;
		while(*q){
			sum=sum*10+*q-'0';
			q++;
		}
		if(sum==phone){
			flag = 1;
			printf("查询到的姓名为%s,id为:%d,年龄为:%d,电话为:%s\n",p->s.name,p->s.id,p->s.age,p->s.phone);
		}
		p = p->next;
	}
	if(flag==0){
	printf("查找不到,未含有此人信息!\n");
	}
}
void SeachByAge(Seqlist *l)
{
	int age;
	printf("请输入要查询的年龄:");
	scanf("%d",&age);
	int mid;
	int low = 0;
	int high = l->len-1;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(age==l->data[mid].age)
		{
		printf("查询到的姓名为%s,id为:%d,年龄为:%d,电话为:%s\n",l->data[mid].name,l->data[mid].id,l->data[mid].age,l->data[mid].phone);	
			return;
		}
		else if(age>l->data[mid].age)
		{
			low=mid+1;
		}
		else{
			high=mid-1;
		}
	}
	printf("未含有该年龄的学生信息\n");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生信息管理是一种常见的应用程序,在C#中可以使用Windows Forms来实现。 以下是一个简单的示例,演示如何创建学生信息管理应用程序: 1. 创建新的Windows Forms应用程序。 2. 在窗体设计器中添加以下控件: - 一个DataGridView控件用于显示学生信息。 - 一些Label控件用于显示文本标签。 - 一些TextBox控件用于输入学生信息。 - 一些Button控件用于执行操作,如添加、删除和更新学生信息。 3. 在代码中定义一个学生类,包含以下属性: - 学号 - 姓名 - 年龄 - 性别 - 电话 - 地址 ```csharp public class Student { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Gender { get; set; } public string Tel { get; set; } public string Address { get; set; } } ``` 4. 在窗体类中定义一个List<Student>用于存储学生信息,并在窗体的Load事件中初始化它。 ```csharp public partial class MainForm : Form { private List<Student> students = new List<Student>(); public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { // 初始化学生信息 students.Add(new Student { ID = 1, Name = "张三", Age = 20, Gender = "男", Tel = "123456789", Address = "北京市" }); students.Add(new Student { ID = 2, Name = "李四", Age = 21, Gender = "女", Tel = "987654321", Address = "上海市" }); students.Add(new Student { ID = 3, Name = "王五", Age = 22, Gender = "男", Tel = "135792468", Address = "广州市" }); // 绑定DataGridView控件 dataGridView1.DataSource = students; } } ``` 5. 实现添加、删除和更新学生信息的代码。 ```csharp // 添加学生信息 private void btnAdd_Click(object sender, EventArgs e) { int id = int.Parse(txtID.Text); string name = txtName.Text; int age = int.Parse(txtAge.Text); string gender = cbGender.Text; string tel = txtTel.Text; string address = txtAddress.Text; students.Add(new Student { ID = id, Name = name, Age = age, Gender = gender, Tel = tel, Address = address }); // 刷新DataGridView控件 dataGridView1.DataSource = null; dataGridView1.DataSource = students; } // 删除学生信息 private void btnDelete_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { int index = dataGridView1.SelectedRows[0].Index; students.RemoveAt(index); // 刷新DataGridView控件 dataGridView1.DataSource = null; dataGridView1.DataSource = students; } } // 更新学生信息 private void btnUpdate_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { int index = dataGridView1.SelectedRows[0].Index; students[index].Name = txtName.Text; students[index].Age = int.Parse(txtAge.Text); students[index].Gender = cbGender.Text; students[index].Tel = txtTel.Text; students[index].Address = txtAddress.Text; // 刷新DataGridView控件 dataGridView1.DataSource = null; dataGridView1.DataSource = students; } } ``` 6. 运行程序并测试。 以上就是一个简单的学生信息管理应用程序的实现。当然,你可以根据需要进行更多的功能扩展,如保存和加载学生信息、查询和过滤学生信息等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值